首頁 >後端開發 >C++ >Await Task 與 Task.Result:有什麼不同?

Await Task 與 Task.Result:有什麼不同?

Barbara Streisand
Barbara Streisand原創
2025-01-08 08:56:42283瀏覽

Await Task vs. Task.Result: What's the Difference?

非同步程式設計中的

await Task<T>Task<T>.Result 對比

理解 await Task<T>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>

這裡,Task<T>.Result 用來檢索任務的結果。 但是,這種方法可能會嚴重影響並發性,因為它強制呼叫執行緒同步等待任務完成。

非同步程式設計使用 await 運算子優雅地解決了這個問題,它允許非阻塞掛起。 這是改良的非同步版本:

<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,呼叫執行緒被釋放,允許其他任務繼續進行。 一旦等待的任務完成,線程就會恢復,並且結果會無縫返回。

本質上:await Task<T> 透過讓出執行緒來促進真正的非同步操作,而 Task<T>.Result 會阻塞執行緒直到任務完成。 一個關鍵的區別是如何處理異常:Result 將異常包裝在 AggregateException 中,而 await 直接重新拋出原始異常。

以上是Await Task 與 Task.Result:有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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