C#:等待所有线程完成

我正在编写的代码中遇到一个通用模式,在该模式下,我需要等待组中的所有线程完成并超时。超时应该是 所有

线程完成所需的时间,所以简单地对每个线程执行thread.Join(timeout)将不起作用,因为那时可能的超时为timeout *

numThreads。

现在,我执行以下操作:

var threadFinishEvents = new List<EventWaitHandle>();

foreach (DataObject data in dataList)

{

// Create local variables for the thread delegate

var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);

threadFinishEvents.Add(threadFinish);

var localData = (DataObject) data.Clone();

var thread = new Thread(

delegate()

{

DoThreadStuff(localData);

threadFinish.Set();

}

);

thread.Start();

}

Mutex.WaitAll(threadFinishEvents.ToArray(), timeout);

但是,对于这种事情似乎应该有一个更简单的习惯用法。

回答:

我仍然认为使用Join更简单。记录预期的完成时间(如Now + timeout),然后循环执行

if(!thread.Join(End-now))

throw new NotFinishedInTime();

以上是 C#:等待所有线程完成 的全部内容, 来源链接: utcz.com/qa/431049.html

回到顶部