Подтвердить что ты не робот

Когда я "жду" метод "асинхронный", он становится синхронным?

Итак, вот сценарий:

static async void Main(string[] args) 
{
    await AnAsyncMethod();
}

private static async task<bool> AnAsyncMethod()
{
    var x = await someAsyncMethod();
    var y = await someOtherAsyncMethod();

    return x == y;
}

Является ли метод someAsyncMethod и someOtherAsyncMethod синхронным, потому что мы используем await или оба они выполняются асинхронно в том порядке, в котором они выполняются?

UPDATE

Учитывая приведенный ниже ответ, в котором говорится, что ожидаемые методы async будут выполняться последовательно, какова была бы цель сделать эти вызовы методов асинхронными в первую очередь, если мы просто прекратим выполнение и дождитесь возврата этих методов? Я видел, что в прошлом приложения для родных приложений ожидали/асинхронно, как средство освобождения потока пользовательского интерфейса, но есть ли другие причины, по которым этот дизайн был бы желателен?

4b9b3361

Ответ 1

Они работают асинхронно, но последовательно. someOtherAsyncMethod не будет вызываться до завершения someAsyncMethod.

Если вы хотите запускать их параллельно, у вас есть несколько параметров

var taskA = MethodA();
var taskB = MethodB();

var a = await taskA;
var b = await taskB;

// or

var results = await Task.WhenAll(MethodA(), MethodB());

Последующий вопрос:

Я видел, что в прошлом приложения для родных приложений ожидали/асинхронно, как средство для освобождения потока пользовательского интерфейса, но есть ли другие причины, по которым этот дизайн был бы желателен?

В приложении ASP.NET вы захотите использовать это, чтобы позволить текущему потоку возвращаться в threadpool и обслуживать другие входящие запросы, в то время как MethodA/MethodB работает - ЕСЛИ эти методы делают true async I/O. Это в основном единственная причина, почему вы делаете это в приложении ASP.NET.

Вы также можете прочитать Стивена Клири: