2
我讀過,async/await方法與調用方在同一個線程中運行,我在WPF應用程序中看到它,但在控制檯應用程序中測試代碼時,我發現它運行在與調用方不同的線程中。 我錯過了什麼嗎? 是否與調用者在同一個線程中運行異步/等待方法?
我讀過,async/await方法與調用方在同一個線程中運行,我在WPF應用程序中看到它,但在控制檯應用程序中測試代碼時,我發現它運行在與調用方不同的線程中。 我錯過了什麼嗎? 是否與調用者在同一個線程中運行異步/等待方法?
我錯過了什麼嗎?
的排序。 await
不知道任何關於的線程。它會導致await
關鍵字(默認情況下)後的代碼與調用方在相同SynchronizationContext
中運行(如果存在)。
在WPF應用程序的情況下,當前SynchronizationContext
被設置爲將回調封送到UI線程,這意味着它將最終在UI線程上結束。 (在Windows窗體中也是如此)。在控制檯應用程序中,不存在SynchronizationContext
,因此它不能回發到該上下文,這意味着您最終會在ThreadPool線程中結束。
如果您要將自定義SynchronizationContext
安裝到SynchronizationContext.Current
,則該調用將在此處發佈。然而,這在控制檯應用程序中並不常見,因爲它通常需要類似「消息循環」的東西才能正常工作。
沒有線程:http://blog.stephencleary.com/2013/11/there-is-no-thread.html – David