[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

ホームページ >バックエンド開発 >C++ >Fire and Forget と Async/Await での待機: 違いは何ですか? それぞれをいつ使用する必要がありますか?

Fire and Forget と Async/Await での待機: 違いは何ですか? それぞれをいつ使用する必要がありますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-12 13:17:42875ブラウズ

Fire and Forget vs. Awaiting in Async/Await: What's the Difference and When Should You Use Each?

Async/Await での Fire and Forget と Awaiting: 違いと使用シナリオ

次のコードは、Callee メソッドを呼び出すさまざまな方法とその動作の違いを示しています。

コール #1: Fire and Forget (シンプル)

Callee このメソッドは非同期で呼び出され、呼び出し元をブロックしません。

コール #2: タスク待ち (遅延)

Callee メソッドは await キーワードを使用し、呼び出し元はそれが完了するまで待機します。 Callee メソッドには 1000 ミリ秒の遅延が含まれるため、呼び出し側では 1 秒以上かかります。

コール #3 & #5: Task.Run(Fire and Forget)

Task.Run Callee メソッドを実行のためにスレッド プールに送信します。 await は使用されないため、両方の呼び出しは Fire and Forget であり、呼び出し元をブロックしません。

呼び出し #4 & #6: Task.Run(タスクの待機)

#3 と #5 に似ていますが、Task.Run は内部で await を使用します。これにより、これらは #2 と同等になり、呼び出し元はタスクが完了するまで待機します。

#3 と #5 の違い

#3 と #5 は両方とも Task.Run を使用しますが、微妙な違いがあります。 #3 では、Callee が直接呼び出され、スレッド プールに新しいタスクが作成されます。 #5 では、Callee が非同期ラムダ式でラップされ、独自のステート マシンを持つ新しいタスクが作成されます。ただし、どちらのミッションも Fire と Forget であるため、この場合、違いは重要ではありません。

Service Fabric に関する注意事項

Service Fabric への移行後、HostingEnvironment.QueueBackgroundWorkItem はサポートされなくなりました。代わりに Task.Run を使用することもできますが、別のバックグラウンド プロセスを使用し、キュー経由で通信することをお勧めします。これにより、フロントエンド サービスとバックエンド サービスが確実に分離され、パフォーマンスの問題やデッドロックが防止されます。

以上がFire and Forget と Async/Await での待機: 違いは何ですか? それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。