asyncawait 关键字的伪代码
考虑一个简单的异步方法:
async Task Foo()
{
Bar();
await Baz();
Qux();
}
简化,我们可以说这段代码实际上意味着以下内容:
Task Foo()
{
Bar();
Task t = Baz();
var context = SynchronizationContext.Current;
t.ContinueWith(task) =>
{
if (context == null)
Qux();
else
context.Post((obj) => Qux(), null);
}, TaskScheduler.Current);
return t;
}
这意味着 async
/ await
关键字使用当前同步上下文(如果存在)。也就是说,你可以编写可在 UI,Web 和控制台应用程序中正常工作的库代码。
来源文章 。