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。每个线程都可以在事件完成时设置事件,主线程可以检查是否设置了事件或调用Wait就可以了。

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

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

于 2013-03-26T18:14:08.017 回答