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 和控制台应用程序中正常工作的库代码。

来源文章