首頁 >後端開發 >C++ >Await 與 Task.Result:什麼時候應該在 C# 中使用它們?

Await 與 Task.Result:什麼時候應該在 C# 中使用它們?

Barbara Streisand
Barbara Streisand原創
2025-01-22 23:24:12917瀏覽

Await vs. Task.Result: When Should I Use Each in C#?

C#非同步程式設計中Await和Task.Result的最佳實踐

C#中的非同步程式設計經常涉及任務(Task),它們封裝了長時間運行的工作單元。處理任務的兩種常見方法是awaitTask.Result。雖然兩者都能達到類似的結果,但它們的行為卻有細微的差別。

await關鍵字會掛起目前方法的執行,直到等待的任務完成。對於已完全完成的任務,await表達式直接傳回任務的結果,使程式碼更簡潔,並可能提高效能。

相反,Task.Result會立即檢索任務的結果。如果任務失敗,它會拋出一個AggregateException異常,並且在某些非同步場景中可能導致死鎖。因此,通常建議使用await而不是Task.Result

Stephen Cleary建議使用await而不是Task.Result,主要基於以下兩個原因:

  1. 異常處理: await不會將異常包裝在AggregateException中,簡化了非同步程式碼中的錯誤管理。
  2. 避免死鎖: ResultWait可能會導致死鎖,尤其是在非同步方法中使用時。 await透過確保任務完成後再恢復執行來消除這種風險。

使用指南:

根據Cleary的建議,以下指南適用於ResultWaitawait的使用:

  • 非同步應用程式程式碼: 總是使用await
  • 非同步實用程式碼: ResultWait可以謹慎使用,並需提供適當的文件說明。
  • 平行任務代碼: ResultWait是適當的。

遵循這些指南可以確保正確處理非同步程式碼,最大限度地減少死鎖,並簡化錯誤處理。

以上是Await 與 Task.Result:什麼時候應該在 C# 中使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn