等待和返回给调用者

3
如果我有一个异步方法:
public async Task MyMethodAsync()
{
   // [.. Some synchronous code here ..]

   await AnotherAsyncMethod();
}

在我的代码中的某个时刻,我会像这样调用它:

await MyMethodAsync();

这个语句是否会在进入MyMethodAsync之前立即返回给调用者?我猜是这样,但不确定。

如果我想让对MyMethodAsync的调用首先立即执行[.. Some synchronous code here ..]部分,是否应该这样做:

var t = MyMethodAsync(); 
await t;                 

谢谢

2个回答

5
当你的代码调用时:
await MyMethodAsync();

然后执行将会同步进入MyMethodAsync。只有当/如果MyMethodAsync返回未完成的Task时,该方法才会“暂停”。

你可能会发现我async/await介绍文章有帮助。


1
这里的关键解释是:“只有当/如果MyMethodAsync返回未完成的任务时,该方法才会“暂停”。” await 关键字本身并不能做到这一点,这让我完全困惑了。 - atconway

3
[.. Some synchronous code here ..] 

将同步执行直到第一个await放弃控制。你做得很好。你最后的示例与之前的示例在同步执行方面完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接