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