首页 >后端开发 >C++ >C# 中的异步/等待:等待还是不等待? 对执行的影响

C# 中的异步/等待:等待还是不等待? 对执行的影响

Susan Sarandon
Susan Sarandon原创
2025-01-12 13:22:43904浏览

Async/Await in C#:  To Await or Not to Await?  The Impact on Execution

C# 中 Async/Await 的使用:等待还是不等待?对执行的影响

以下代码包含六次对 Callee 方法的调用,其执行方式各有不同:

  1. 异步调用(Fire-and-forget): Callee 方法被异步调用,不进行等待。方法在后台异步运行,调用方法立即继续执行。

  2. 等待异步调用: Callee 方法被调用并使用 await 等待其完成。调用方法会等待 Callee 方法执行完毕后再继续执行后续代码。确保 Callee 方法完成后才执行其后的代码。

  3. 使用 Task.Run 的异步调用: Callee 方法使用 Task.Run 启动,但不等待结果。与情况 1 相同,Callee 方法在后台运行,调用方法立即继续执行。

  4. 使用 Task.Run 并等待异步调用: Callee 方法使用 Task.Run 启动,并等待结果。这与情况 2 等效,调用方法等待 Callee 方法完成之后才继续执行。

  5. 使用 Task.Run 和 async 的异步调用: 与情况 3 相同,只是 Callee 方法声明为 asyncasync 关键字允许方法以异步方式调用,即使它被 Task.Run 包装。

  6. 使用 Task.Run 和 async 并等待异步调用: 与情况 4 相同,只是 Callee 方法声明为 async。同样,async 关键字允许等待方法,即使它被 Task.Run 包装。

总结:这些调用的底层逻辑如下:

  • 情况 1 和 3: Callee 方法在后台线程上运行,调用方法立即继续执行。

  • 情况 2 和 4: 调用方法等待 Callee 方法完成之后才执行其后的代码。

  • 情况 5 和 6: 这些是使用 Task.Run 进行额外并行处理的异步调用。但是,async 关键字允许根据需要等待它们。

以上是C# 中的异步/等待:等待还是不等待? 对执行的影响的详细内容。更多信息请关注PHP中文网其他相关文章!

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