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中文網其他相關文章!