Fire-and-Forget タスクのスケジューリングに対する Async/Await の影響を調査する
この分析では、特にファイア アンド フォーゲット シナリオにおける async/await の複雑さを調べます。 付属のコード (ここには示されていません) は、多様なアプローチがタスクのスケジュールと実行にどのような影響を与えるかを示しています。
ファイア・アンド・フォーゲット: 単純な無視
最初の例 (#1) は、基本的なファイアアンドフォーゲット操作を示しています。 Callee
メソッドは、呼び出し元がその結論を待たずに非同期で実行されます。
完了待ち
逆に、2 番目の例 (#2) は、Callee
の結果を待つ従来のアプローチを示しています。 呼び出し元は、非同期操作が完了するまで実行を一時停止します。
Task.Run と非同期呼び出し: 比較
例 #3 と #5 では、Callee
経由で Task.Run
を直接呼び出す場合と、デリゲート内で非同期ラムダを使用する場合を比較しています。 構文的には異なりますが、どちらもスレッド プール スレッドで Callee
を起動し、ファイア アンド フォーゲット方式で動作します。
非同期ラムダとスレッドプールのスレッド
例 #4 と #6 は、非同期ラムダで Task.Run
を利用します。 ラムダはスレッド プールのスレッド上で同時に実行されます。 ただし、呼び出し元はラムダの完了を待ち、Callee
が完了するまで後続の操作が開始されないようにします。
以上がAsync/Await は、Fire-and-Forget シナリオのタスク スケジュールにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。