2

スレッドのグループを継続的に監視し、スレッドが終了した後に何らかのアクションを実行するにはどうすればよいですか。

私のコードは次のとおりです。

int threadcount = 5;

for (int i = 0; i < threadcount; i++)
{                    
  _azgetThread = new Thread(() => Getazuredata());
  _azgetThread.Start();
}

上記の場合、5つのスレッド(_azgetThread)が作成され、それらを監視して、いつ終了したかを知りたいと思います。

私は_azgetThread.IsAliveに精通していますが、この場合は複数のインスタンスがあります。

4

1 に答える 1

3

ここでの適切なオプションは、CountdownEventを使用することです。各スレッドは、イベントの完了時にイベントを設定できます。メインスレッドは、イベントが設定されているかどうかを確認するか、Waitonを呼び出すことができます。

いつでも同じメカニズム(チェック)を使用できますが、5つのスレッドすべてに単一の変数を使用する代わりにIsAlive、スレッドを配列に格納する必要があります。List<Thread>

そうは言っても、個々のスレッドの代わりにTPLを使用することもお勧めします。作業に応じて、5つのアイテムすべてを使用Parallel.ForまたはParallel.ForEach実行したり、アイテムのコレクション全体でPLINQを使用したりすることもできます。同じロジックを維持したい場合は、5つの初期タスクが完了したときに通知するタスクを使用Task.Factory.StartNewしてスケジュールすることができます。Task.WhenAll

于 2013-03-26T18:14:08.017 に答える