首頁 > 後端開發 > C++ > Task.Start/Wait 與 Async/Await:非同步程式設計的主要差異是什麼?

Task.Start/Wait 與 Async/Await:非同步程式設計的主要差異是什麼?

Mary-Kate Olsen
發布: 2025-01-10 22:23:46
原創
335 人瀏覽過

Task.Start/Wait vs. Async/Await: What's the Key Difference in Asynchronous Programming?

Task.Start/Wait 與 Async/Await:有何不同?

在非同步程式設計領域,理解使用 Task.Start/Wait 的同步方法和使用 Async/Await 的非同步方法之間的區別至關重要。

請看以下程式碼片段:

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

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

在第一個程式碼片段中,我們使用傳統的 Task.Start/Wait 同步方法。其工作原理如下:

  • 使用 Task.Factory.StartNew 建立一個新任務,在 DoSomethingThatTakesTime 方法中執行耗時操作。
  • 透過呼叫任務上的 Wait() 方法來阻塞目前執行緒。這意味著程式將在任務完成之前等待。

相反,第二個程式碼片段示範了使用 Async/Await 的非同步方法:

  • 同樣,像之前一樣啟動一個任務。
  • 但它沒有使用 Wait() 阻塞線程,而是使用了 await 關鍵字。這使得當前執行緒在後台任務運行時繼續執行。
  • 當任務完成後,一則訊息會自動排入訊息佇列,指示 await 後面的程式碼部分應該恢復執行。

這兩種方法的主要差異在於任務運行時執行緒的行為。使用 Task.Start/Wait,執行緒被阻塞,無法回應其他事件。相反,Async/Await 允許執行緒在等待回應時執行其他任務。

想像一下在餐廳點午餐。使用 Task.Start/Wait,就像在你用餐之前忽略坐在你旁邊的人一樣。使用 Async/Await,就像在你等待湯上桌時繼續與朋友交談一樣。後台的工作仍在進行,但你的執行緒在等待結果時可以執行其他操作。

以上是Task.Start/Wait 與 Async/Await:非同步程式設計的主要差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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