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 和控制檯應用程式中正常工作的庫程式碼。

來源文章