首頁 > 後端開發 > C++ > `Task.Result` 與 `await Task`:什麼時候該使用哪一個?

`Task.Result` 與 `await Task`:什麼時候該使用哪一個?

Susan Sarandon
發布: 2025-01-08 09:02:41
原創
421 人瀏覽過

`Task.Result` vs. `await Task`: When Should You Use Which?

理解非同步程式設計中的 Task<T>.Resultawait Task<T>

在非同步程式設計中,await Task<T>Task<T>.Result 之間的選擇會顯著影響效能和異常處理。 讓我們來看看主要的區別。

GetName 方法說明了兩種方法:

使用Task<T>.Result

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return nameTask.Result;
}</code>
登入後複製

nameTask.Result 阻塞目前線程,直到任務完成。這對於長時間運行的操作來說效率低下,可能會導致應用程式凍結。

使用await Task<T>

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return await nameTask;
}</code>
登入後複製

await nameTask 釋放呼叫線程,允許其他任務並發執行。 此方法僅在 nameTask 完成時恢復。

關鍵區別:

  • 線程阻塞: Task<T>.Result 阻塞; await Task<T> 沒有。
  • 異常處理: await Task<T>直接傳播異常; Task<T>.Result 將它們包裹在 AggregateException 中。

最佳實務:

  • 後台任務避免使用Task.Factory.StartNew;使用 Task.Run 來提高效率並更好地與 .NET 執行緒池整合。
  • 雖然 Task<T>.ResultTask.Factory.StartNew 可用於動態任務並行性,但在非同步程式設計情境中通常不鼓勵使用它們,而是使用 await 以獲得更好的回應能力和可維護性。 使用 await 是非同步操作的首選且更健壯的方法。

以上是`Task.Result` 與 `await Task`:什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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