首页 >后端开发 >C++ >C# 中的'即发即忘”:Async/Await 与旧的异步委托 – 哪种方法最好?

C# 中的'即发即忘”:Async/Await 与旧的异步委托 – 哪种方法最好?

Linda Hamilton
Linda Hamilton原创
2025-01-08 07:37:40787浏览

Fire-and-Forget in C#: Async/Await vs. the Old Async Delegate – Which Approach Is Best?

C#中的“启动并忘记”:Async/Await与旧的异步委托——哪种方法最佳?

在简化C#中“启动并忘记”调用的尝试中,开发人员在过渡到新的异步语法时可能会遇到挑战。本文探讨了旧方法和新方法之间的区别。

在旧方法中(示例代码中由“async”委托演示),一旦调用EndInvoke()方法,底层线程就会终止。BeginInvoke()方法确保线程启动,允许“启动并忘记”操作异步调用DoIt()方法。虽然这种方法有效,但它需要手动关闭异步等待句柄。

新的异步语法(由DoIt2()方法举例说明)消除了对EndInvoke()和句柄关闭的需求。但是,它引入了等待Task.Yield()的要求,这需要重写现有的异步方法以添加此占位符。

为了解决异步调用同步方法A()而不产生不必要的复杂性的问题,开发人员可以避免使用async void,并使用Task.Run(A)直接调用A()。这种方法模拟了旧的异步委托,而没有async/await的复杂性。

以上是C# 中的'即发即忘”:Async/Await 与旧的异步委托 – 哪种方法最好?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn