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