複数のスレッドを開始していますが、いずれかがいつ終了するかを知りたいです。私は次のコードを知っています:
foreach (Thread t in threads)
t.Join();
ただし、すべてのスレッドが一緒になるのを待つだけです。それは遅すぎる。他のスレッドがまだ実行中であっても、1 つのスレッドがいつ終了するかを知る必要があります。WaitAny
スレッドのみに相当するものを探しています。しかし、監視しているすべてのスレッドにコードを追加することはできないため、シグナルやその他の同期オブジェクトを使用することはできません。
明確化:私は、アプリケーションのアクティビティをログに記録するログ/トレース ツールに取り組んでいます。スレッドの開始時にログ ステートメントを挿入できますが、スレッドから出る可能性のあるすべての方法 (複数の終了ポイント、例外など) にログ ステートメントを挿入することはできません。そのため、新しいスレッドを登録して、ログ エントリの書き込みが終了したときに通知を受け取りたいと考えています。すべてのスレッドで非同期にできますJoin
が、それは監視対象のスレッドごとに 2 番目のスレッドを意味し、オーバーヘッドが少し大きくなる可能性があります。BackgroundWorker
スレッドは、Task
やプール スレッドなど、さまざまな手段で使用されます。本質的に、それはスレッドであり、それがいつ完了するかを知りたい. 正確なスレッド メカニズムは、ロギング ソリューションではなく、アプリケーションによって定義されます。