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