首頁 > 後端開發 > C++ > 即發即忘非同步操作:Async/Await 與「舊非同步委託」-哪個比較好?

即發即忘非同步操作:Async/Await 與「舊非同步委託」-哪個比較好?

Patricia Arquette
發布: 2025-01-08 07:39:41
原創
335 人瀏覽過

Fire-and-Forget Asynchronous Operations: Async/Await vs. the

C# 中的 Fire-and-Forget 非同步操作:Async/Await 與傳統方法

Fire-and-forget 方法非常適合那些不需要明確執行追蹤的非同步操作。在 C# 中,主要有兩種方法:傳統的非同步委託和較新的 async/await 語法。

Async/Await 的回顧

async/await 語法簡化了 fire-and-forget 操作,消除了手動呼叫 EndInvoke() 和關閉句柄的需要。但是,它要求在目標方法中明確等待任務。對於需要轉換為非同步的現有同步方法來說,這可能不太方便。

性能和清理方面的考慮

雖然 async/await 看起來更簡潔,但它並不一定提供任何顯著的效能優勢。兩種方法都涉及分配一個新的線程池線程來執行操作。

非同步呼叫同步方法

如果無法修改後台方法,則使用 async/await 進行 fire-and-forget 轉換並不直接。一種解決方法是建立包裝非同步方法,在同步方法上等待 Task.Run(),如下所示:

<code class="language-csharp">async Task DoAsync(string entry)
{
    await Task.Run(() => DoIt(entry));
}</code>
登入後複製

建議避免使用 Async Void

如答案所示,async void 方法的錯誤處理不可預測,應盡量避免使用。

用 Task.Run() 簡化 Fire-and-Forget

為了最大限度地簡化操作,請考慮直接使用 Task.Run() 以 fire-and-forget 的方式執行同步方法,而無需 async/await:

<code class="language-csharp">Task.Run(() => DoIt(entry));</code>
登入後複製

這種方法模擬了「舊的非同步委託」的行為,而無需手動呼叫 EndInvoke() 和關閉句柄的開銷。

以上是即發即忘非同步操作:Async/Await 與「舊非同步委託」-哪個比較好?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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