按顺序执行多个异步方法调用

好像我过去曾经遇到过这个问题的答案,但现在我无法找到它。

假设我有两个异步方法,Method1和Method2。 如果我需要顺序调用Method1然后调用Method2(读取,Method1必须在Method2之前完成),以下代码是否正确?

await Method1(); await Method2(); 

基于此处对另一个SO问题的接受答案的信息以及MSDN文章中的信息 ,我相信这是正确的方法。 此外,此代码似乎可以工作,但我不想引入一个稍微难以追踪的微妙错误。

是的,这是正确的方法。 它们将按顺序执行。

msdn的重要引用:

await运算符告诉编译器,在等待的异步进程完成之前,异步方法无法继续超过该点

如果你想并行执行它们,你必须使用这样的东西:

 var t1 = DoTaskAsync(...); var t2 = DoTaskAsync(...); var t3 = DoTaskAsync(...); await Task.WhenAll(t1, t2, t3); 

我知道这个线程有点旧,但我想添加一个使用异步方法遇到的问题。

这纯粹是为了洞察,而我通过反复试验得出的东西。

如果你创建一个void()方法,你不能await它,除非你调用这样的方法:

 await Task.Run(() => Method()); 

…使用方法声明:

 void Method() {...} 

使用await Task.Run调用函数可以执行多个方法,而无需等待任何先前的函数执行。

例如,如果你有:

 void Method1() {...} void Method2() {...} void Method3() {...} 

你打电话给他们是这样的:

 await Task.Run(() => Method1()); await Task.Run(() => Method2()); await Task.Run(() => Method3()); 

在调用Method2等之前,await操作不会等待Method1完成。

要克服这个问题,请创建如下函数:

 async Task Method1() {...} async Task Method2() {...} async Task Method3() {...} 

并称他们为:

 await Method1(); await Method2(); await Method3();