C# 中 Async/Await 的使用:等待还是不等待?对执行的影响
以下代码包含六次对 Callee
方法的调用,其执行方式各有不同:
异步调用(Fire-and-forget): Callee
方法被异步调用,不进行等待。方法在后台异步运行,调用方法立即继续执行。
等待异步调用: Callee
方法被调用并使用 await
等待其完成。调用方法会等待 Callee
方法执行完毕后再继续执行后续代码。确保 Callee
方法完成后才执行其后的代码。
使用 Task.Run 的异步调用: Callee
方法使用 Task.Run
启动,但不等待结果。与情况 1 相同,Callee
方法在后台运行,调用方法立即继续执行。
使用 Task.Run 并等待异步调用: Callee
方法使用 Task.Run
启动,并等待结果。这与情况 2 等效,调用方法等待 Callee
方法完成之后才继续执行。
使用 Task.Run 和 async 的异步调用: 与情况 3 相同,只是 Callee
方法声明为 async
。async
关键字允许方法以异步方式调用,即使它被 Task.Run
包装。
使用 Task.Run 和 async 并等待异步调用: 与情况 4 相同,只是 Callee
方法声明为 async
。同样,async
关键字允许等待方法,即使它被 Task.Run
包装。
总结:这些调用的底层逻辑如下:
情况 1 和 3: Callee
方法在后台线程上运行,调用方法立即继续执行。
情况 2 和 4: 调用方法等待 Callee
方法完成之后才执行其后的代码。
情况 5 和 6: 这些是使用 Task.Run
进行额外并行处理的异步调用。但是,async
关键字允许根据需要等待它们。
以上是C# 中的异步/等待:等待还是不等待? 对执行的影响的详细内容。更多信息请关注PHP中文网其他相关文章!