所以这是场景:
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线程的方法,但是有没有其他原因可以解释为什么这个设计是可取的呢?
答案 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的作品: