19

仍在学习异步等待。我遇到了类似于以下的示例:

public async Task MethodAsync()
{
  await Method01Async();
  await Method02Async();
}

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

4

1 回答 1

21

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

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

如果你有:

public async Task MethodAsync()
{
  await Method01Async();
  Method02Async();
}

然后MethodAsync将(异步)等待Method01Async完成,然后开始Method02AsyncMethodAsync然后将完成,而Method02Async可能仍在进行中。

你拥有它的方式:

public async Task MethodAsync()
{
  await Method01Async();
  await Method02Async();
}

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

于 2012-04-20T14:09:09.147 回答