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