首頁 >後端開發 >C++ >我什麼時候應該將'Task.Run”與 Async/Await 一起使用?

我什麼時候應該將'Task.Run”與 Async/Await 一起使用?

DDD
DDD原創
2025-01-03 13:42:40745瀏覽

When Should I Use `Task.Run` with Async/Await?

理解Async/Await:何時使用Task.Run

在非同步程式設計領域,區分非同步方法(async)和非同步執行(後台線程)。為了深入研究細微差別,讓我們探討以下場景:

場景1:無後台執行緒

private async Task DoWork1Async()
{
    int result = 1 + 2;
}

在此範例中,該方法被標記為非同步,但執行不需要後台執行的簡單操作。因此,等待 DoWork1Async() 將同步執行。

場景 2:在後台執行緒上執行

private async Task DoWork2Async()
{
    Task.Run( () =>
    {
        int result = 1 + 2;
    });
}

這裡,該方法再次標記為非同步,但是它將實際操作包裝在 Task.Run 中。這確保操作在後台執行緒上執行。然而,等待 DoWork2Async() 仍將同步執行,因為後台執行緒操作未被等待。

方法回傳類型和異步步行為

a 的回傳類型方法也可以影響其異步行為。 返回任務或任務的方法可以等待。 這意味著在非同步方法中,我們可以使用await來暫停其執行,並在等待的任務完成後恢復。

Task.Run 非同步執行

要使方法可等待並在後台執行緒上執行其操作,我們應該使用Task.Run 建立一個新的task. 這種方法比將整個方法包裝在Task.Run中更合適,因為它允許我們在同步和非同步程式碼之間保持清晰的分離。

private Task<int> DoWorkAsync() // No async because the method does not need await
{
  return Task.Run(() =>
  {
    return 1 + 2;
  });
}

最佳實務

  • 使用 Task.Run 進行後台執行緒執行。
  • 避免包裝同步方法在任務中運作;讓消費者決定如何執行它們。
  • 採用聲明式 async/await 語法來寫非同步程式碼。
  • 有關非同步的更多詳細信息,請參閱 MSDN 文件。

以上是我什麼時候應該將'Task.Run”與 Async/Await 一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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