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
)的兩個主要原因:
await
不會將異常包裝在AggregateException
中,提供更清晰的異常處理機制。 .Result
或Wait
可能導致死鎖或細微的運行時問題。 使用指引
雖然並非完全禁止使用.Result
或Wait
,但建議遵循以下指南:
await
。 .Result
或Wait
,並提供充分的文件說明。 .Result
和Wait
是適當的。 遵循這些指南,開發者可以改進異常處理,防止死鎖,並編寫更健壯、更容易維護的非同步程式碼。
以上是Await 與 Result:何時應該在 C# 非同步任務中使用 `await` 而不是 `.Result`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!