首頁 > 後端開發 > C++ > Task.Start/Wait 與 Async/Await:處理長時間運行的操作有何不同?

Task.Start/Wait 與 Async/Await:處理長時間運行的操作有何不同?

Barbara Streisand
發布: 2025-01-10 22:36:41
原創
336 人瀏覽過

Task.Start/Wait vs. Async/Await:  What's the Difference in Handling Long-Running Operations?

Task.Start/Wait 與 Async/Await:處理耗時操作的差異

在多執行緒和非同步程式設計領域,理解 Task.Start/Wait 和 async/await 方法之間的區別至關重要。這兩種技術為處理耗時操作提供了不同的機制,從而提高應用程式的回應能力和效能。

Task.Start/Wait:同步阻塞

在 Task.Start/Wait 方法中,使用 Task.Factory.StartNew(Action) 建立一個新任務,並為其指派一個委託來執行耗時操作。然後,t.Wait() 呼叫強制呼叫執行緒等待,直到任務完成執行。

考慮以下程式碼片段:

<code class="language-csharp">public void MyMethod()
{
  Task t = Task.Factory.StartNew(DoSomethingThatTakesTime);
  t.Wait();
  UpdateLabelToSayItsComplete();
}</code>
登入後複製

在此範例中,只有在 DoSomethingThatTakesTime() 作業完成後,呼叫執行緒才會執行 UpdateLabelToSayItsComplete() 方法。此方法會阻塞呼叫執行緒的處理,從而延遲其他任務的執行。

Async/Await:非同步非阻塞

相較之下,async/await 方法使用非同步程式設計來執行耗時操作,而不會阻塞呼叫執行緒。 async void 關鍵字允許方法成為非同步方法,其中 await 運算子將控制權交給呼叫方,直到任務完成。

以下是使用 async/await 的更新程式碼片段:

<code class="language-csharp">public async void MyMethod()
{
  var result = Task.Factory.StartNew(DoSomethingThatTakesTime);
  await result;
  UpdateLabelToSayItsComplete();
}</code>
登入後複製

在這種情況下,await result 語句會掛起 MyMethod() 方法的執行,直到 DoSomethingThatTakesTime() 任務完成。同時,呼叫線程可以自由執行其他任務。

類比理解差異

想像一下餐廳場景:您向服務員點餐,然後選擇在湯到達之前忽略您的朋友(Task.Wait),或者與朋友交談,讓服務員在聊天暫停時送上湯(async/await)。

以上是Task.Start/Wait 與 Async/Await:處理長時間運行的操作有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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