首頁 >後端開發 >C++ >Await 與 Result:何時應該在 C# 非同步任務中使用 `await` 而不是 `.Result`?

Await 與 Result:何時應該在 C# 非同步任務中使用 `await` 而不是 `.Result`?

DDD
DDD原創
2025-01-22 22:51:09746瀏覽

Await vs. Result: When Should You Use `await` Instead of `.Result` in C# Async Tasks?

C#非同步任務中await.Result的選擇

在Stephen Cleary的《C#並發程式設計手冊》中,一種技巧吸引了我的注意:

<code class="language-csharp">var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
  return null;
return await downloadTask;</code>

既然downloadTask如果沒有超時就已經完成了,為什麼還要進行第二次await而不是直接回傳downloadTask.Result呢?

await優於.Result的優勢

作者強調了優先使用await而不是.Result(或Wait)的兩個主要原因:

  1. 異常處理: await不會將異常包裝在AggregateException中,提供更清晰的異常處理機制。
  2. 避免死鎖: 在非同步方法中使用.ResultWait可能導致死鎖或細微的運行時問題。

使用指引

雖然並非完全禁止使用.ResultWait,但建議遵循以下指南:

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

遵循這些指南,開發者可以改進異常處理,防止死鎖,並編寫更健壯、更容易維護的非同步程式碼。

以上是Await 與 Result:何時應該在 C# 非同步任務中使用 `await` 而不是 `.Result`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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