传统的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中文网其他相关文章!