.Wait()與.GetAwaiter()之間有什么區別


兩者都是同步等待操作的結果
差異主要在於處理異常.使用Wait,異常堆棧跟蹤不會改變並表示異常時的實際堆棧,因此如果您有一段代碼在線程池線程上運行,那么您將擁有類似的堆棧

ThreadPoolThread.RunTask
YourCode.SomeWork
另一方面,.GetAwaiter().GetResult()將重寫堆棧跟蹤以考慮所有異步上下文,忽略代碼的某些部分在UI線程上執行,而某些部分在ThreadPool線程上執行,有些是簡單的異步I / O.因此,您的堆棧跟蹤將反映代碼中的同步步驟:

TheSyncMethodThatWaitsForTheAsyncMethod
YourCode.SomeAsyncMethod
SomeAsync
YourCode.SomeWork
至少可以說,這往往會使異常堆棧跟蹤更加有用.您可以在應用程序的上下文中查看調用YourCode.SomeWork的位置,而不是“它運行的物理方式”.

這是如何工作的一個例子是在reference source(當然是非契約的).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM