异步/等待:即发即忘与等待完成
理解调用者函数和被调用异步函数之间的交互对于高效和正确的代码至关重要。 让我们看看不同的方法:
场景 1:Fire and Forget(简单): 被调用函数 (Callee) 已启动,但调用者 (Caller) 忽略其完成。 呼叫者立即继续。
场景 2:等待完成: 调用方显式等待被调用方完成,然后再继续执行。
现在,我们来介绍一下线程池的复杂性:
场景 3:ThreadPool 线程上的“Fire and Forget”: 被调用者在线程池线程上运行,但调用者忽略其完成状态。
场景 4:在 ThreadPool 线程上等待完成: 调用者耐心等待被调用者完成,即使它在线程池线程上异步运行。
最后,让我们考虑一下async
关键字的影响:
场景 5:在 ThreadPool 线程上使用异步方式“Fire and Forget”: 与场景 3 类似,但声明了被调用者 async
,但其完成仍然被忽略。
场景 6:在 ThreadPool 线程上等待异步完成: 调用者利用 await
在继续之前确保被调用者完成,即使被调用者在线程池线程上运行也是如此。 这是最稳健的方法。
以上是即发即忘与异步/等待中的等待:您应该何时等待异步任务完成?的详细内容。更多信息请关注PHP中文网其他相关文章!