如何连续监视一组线程,然后在它们结束后执行某些操作?

时间:2013-03-26 18:12:18

标签: c#

如何连续监控一组线程,然后在它们结束后执行某些操作。

我的代码如下:

int threadcount = 5;

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

在上面的例子中,创建了5个线程(_azgetThread),我想监视它们并知道它们何时结束。

我熟悉_azgetThread.IsAlive但在这种情况下有多个实例。

1 个答案:

答案 0 :(得分:3)

这里的一个好选择是使用CountdownEvent。每个线程都可以在事件完成时设置事件,主线程可以检查事件是否已设置或在其上调用Wait

您始终可以使用相同的机制(检查IsAlive),但是您需要将线程存储在数组或List<Thread>中,而不是为所有5个线程使用单个变量。

话虽如此,我还建议使用TPL而不是单个线程。根据您的工作,您可以使用Parallel.ForParallel.ForEach来运行所有5个项目,甚至可以在一组项目中使用PLINQ。如果您想保持相同的逻辑,可以使用Task.Factory.StartNewTask.WhenAll来安排在5个初始任务完成时通知您的任务。