首頁 > 後端開發 > C++ > `.getawaiter()。getResult()

`.getawaiter()。getResult()

Susan Sarandon
發布: 2025-01-24 11:51:10
原創
219 人瀏覽過

`.GetAwaiter().GetResult()` vs. `Task.Result`: When Should You Use Each?

Task.GetAwaiter().GetResult()Task.Result:何時使用哪一個?

在程式碼中同步執行非同步方法的需求很常見。這可以透過 Task.GetAwaiter().GetResult().Result 屬性來實現。然而,理解這兩種方法的細微差別和潛在缺點至關重要。

Task.GetAwaiter().GetResult()

呼叫 Task 上的 .GetAwaiter().GetResult() 會直接檢索其結果或拋出任何未觀察到的異常。這種行為優於 .Wait().Result,因為它確保了原始異常的傳播,而不會將其封裝在 AggregateException 中。

但是,需要注意的是,.GetAwaiter().GetResult().Wait().Result 一樣,存在死鎖和執行緒池資源耗盡的風險。

Task.Result

Task.Result 屬性也會擷取其結果,如果任務被取消則會拋出 TaskCanceledException。然而,非同步操作中任何其他未觀察到的異常將被捕獲並包裝在 AggregateException 中。

何時使用哪一種方法

儘管 .GetAwaiter().GetResult() 具有異常傳播的優勢,但強烈建議盡可能避免非同步任務的同步阻塞。這種方法可能導致死鎖和資源耗盡。相反,考慮使用 async/await 機制編寫完全非同步的程式碼,以避免這些問題。

以上是`.getawaiter()。getResult()的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板