等待最后一个方法行

Han*_*ans 17 .net c# async-await c#-5.0

还在学习async-await.我碰到了类似以下的例子:

public async Task MethodAsync()
{
  await Method01Async();
  await Method02Async();
}
Run Code Online (Sandbox Code Playgroud)

最后等待的目的是什么?Method02Async是MethodAsync方法的最后一行.所以没有任何方法余数 - 下面没有任何行 - 在编译器生成的回调中没有任何东西要调用...我错过了什么吗?

Ste*_*ary 18

实际上有一个"方法余数" - 它完成了Task返回的MethodAsync.

(Method02Async等待的返回值),MethodAsync直到Method02Async完成才完成.

如果你有:

public async Task MethodAsync()
{
  await Method01Async();
  Method02Async();
}
Run Code Online (Sandbox Code Playgroud)

然后MethodAsync意志(异步)等待Method01Async完成然后开始Method02Async.MethodAsync然后将完成,同时Method02Async可能仍在进行中.

你拥有它的方式:

public async Task MethodAsync()
{
  await Method01Async();
  await Method02Async();
}
Run Code Online (Sandbox Code Playgroud)

意味着MethodAsync(异步)等待Method01Async完成然后(异步)等待Method02Async完成,然后才会MethodAsync完成.

  • 特别是,假设Method02Async是,例如,Task.Delay(5000).如果有人说"等待MethodAsync()"然后在延迟完成之前完成了*任务,那将是非常奇怪的! (5认同)
  • @duduamar:在这种情况下,只需返回没有 `async`/`await` 的任务。 (2认同)