首頁 > 後端開發 > C++ > 新的 Async/Await 語法如何影響 C# 中的「即發即棄」操作?

新的 Async/Await 語法如何影響 C# 中的「即發即棄」操作?

Linda Hamilton
發布: 2025-01-08 07:48:09
原創
929 人瀏覽過

How Does the New Async/Await Syntax Impact Fire-and-Forget Operations in C#?

C# 中的非同步/等待和即發即棄操作:比較

傳統的C#「即發即忘」非同步操作,使用委託和非同步委託,在不阻塞主執行緒的情況下執行任務。 async/await 的引入完善了這種方法。

讓我們來比較一下新舊方法:

<code class="language-csharp">// Old approach
Action<string> asyncAction = DoIt;
asyncAction.BeginInvoke("Test", ar => { asyncAction.EndInvoke(ar); ar.AsyncWaitHandle.Close(); }, null);
Console.WriteLine("Old-style main thread finished");

// New approach
DoIt2("Test2");
Console.WriteLine("New-style main thread finished");</code>
登入後複製

兩者達到相同的結果,但 async/await 簡化了流程,消除了 EndInvoke 和手動關閉手柄的需要。 然而,在某些情況下await Task.Yield();可能是必要的。

效能與資源管理

這些方法之間的效能差異可以忽略不計。 async/await 的主要優勢在於其改進的資源管理;它會自動處理清理,消除與手動句柄管理相關的資源洩漏風險。

非同步呼叫同步方法

要非同步執行同步方法,A(),無需更改其程式碼,請將其包裝在非同步方法中:

<code class="language-csharp">public static async Task<TResult> InvokeAsync<TResult>(Func<TResult> action)
{
    return await Task.Run(action);
}</code>
登入後複製

呼叫包裝器:

<code class="language-csharp">var task = InvokeAsync(A);</code>
登入後複製

避免async void

最好避免使用 async void 方法,因為它們在異常處理方面很複雜。 上面基於 Task 的方法為處理潛在錯誤提供了更強大且易於管理的解決方案。

以上是新的 Async/Await 語法如何影響 C# 中的「即發即棄」操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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