当我等待"等待" " async"方法是否同步?

时间:2015-09-09 14:26:04

标签: c# asynchronous async-await

所以这是场景:

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;
}

是&#34; someAsyncMethod&#34;和&#34; someOtherAsyncMethod&#34;同步运行,因为我们正在使用等待,或者它们是否按照执行顺序异步运行?

更新

鉴于以下答案说明等待的异步方法将按顺序运行,如果我们只是停止执行并等待那些方法的返回,那么首先使这些方法调用异步的目的是什么?值?我曾经看过过去的原生应用程序使用await / async作为释放UI线程的方法,但是有没有其他原因可以解释为什么这个设计是可取的呢?

1 个答案:

答案 0 :(得分:28)

它们以异步方式运行,但顺序。 <{1}}完成后才会调用someOtherAsyncMethod

如果你想并行运行 ,你有几个选择

someAsyncMethod

后续问题:

  

我曾经看过过去的原生应用程序使用await / async作为释放UI线程的方法,但是有没有其他原因可以解释为什么这个设计需要?

在ASP.NET应用程序中,您将要使用它来允许当前线程返回到线程池并提供其他传入请求,而var taskA = MethodA(); var taskB = MethodB(); var a = await taskA; var b = await taskB; // or var results = await Task.WhenAll(MethodA(), MethodB()); / MethodA正在运行 - 如果这些方法正在进行真正的异步I / O.这基本上是您在ASP.NET应用程序中执行此操作的唯一原因。

您可能还想阅读Stephen Cleary的作品: