首页 > 后端开发 > C++ > 即发即忘异步操作:Async/Await 与'旧异步委托”——哪个更好?

即发即忘异步操作:Async/Await 与'旧异步委托”——哪个更好?

Patricia Arquette
发布: 2025-01-08 07:39:41
原创
301 人浏览过

Fire-and-Forget Asynchronous Operations: Async/Await vs. the

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板