2014-01-27 31 views

回答

11

我錯過了什麼嗎?

的排序。 await不知道任何關於的線程。它會導致await關鍵字(默認情況下)後的代碼與調用方在相同SynchronizationContext中運行(如果存在)。

在WPF應用程序的情況下,當前SynchronizationContext被設置爲將回調封送到UI線程,這意味着它將最終在UI線程上結束。 (在Windows窗體中也是如此)。在控制檯應用程序中,不存在SynchronizationContext,因此它不能回發到該上下文,這意味着您最終會在ThreadPool線程中結束。

如果您要將自定義SynchronizationContext安裝到SynchronizationContext.Current,則該調用將在此處發佈。然而,這在控制檯應用程序中並不常見,因爲它通常需要類似「消息循環」的東西才能正常工作。