非同期/待機: 起動して忘れる vs. 完了を待つ
呼び出し元関数と呼び出される非同期関数の間の相互作用を理解することは、効率的で正しいコードを実現するために非常に重要です。 さまざまなアプローチを検討してみましょう:
シナリオ 1: 起動して忘れる (単純): 呼び出された関数 (Callee) が開始されますが、その完了は呼び出し元 (Caller) によって無視されます。 発信者はすぐに続行します。
シナリオ 2: 完了の待機: 呼び出し元は、実行を続行する前に、呼び出し先が終了するのを明示的に待ちます。
ここで、スレッド プールの複雑さを紹介しましょう:
シナリオ 3: ThreadPool スレッド上で起動して忘れる: 呼び出し先はスレッド プール スレッド上で実行されますが、呼び出し元はその完了ステータスを無視します。
シナリオ 4: ThreadPool スレッドでの完了待ち: 呼び出し元は、スレッド プール スレッドで非同期に実行されている場合でも、呼び出し先が完了するまで辛抱強く待ちます。
最後に、async
キーワードの影響を考えてみましょう:
シナリオ 5: ThreadPool スレッド上の非同期で起動して忘れる: シナリオ 3 と似ていますが、呼び出し先は async
と宣言されていますが、その完了は依然として無視されます。
シナリオ 6: ThreadPool スレッドでの非同期による完了の待機: 呼び出し側は、呼び出し先がスレッド プール スレッドで実行されている場合でも、続行する前に await
を利用して呼び出し先の完了を確認します。 これは最も堅牢なアプローチです。
以上がFire and Forget と Async/Await での待機: 非同期タスクが完了するまでいつ待機する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。