我在编写的代码中遇到一个常见的模式,需要等待一组线程完成,同时还需要设置超时时间。超时时间应该是所有线程完成所需的时间,因此仅对每个线程执行
目前我会像下面这样做:
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);
然而,似乎应该有一种更简单的惯用语来表达这种情况。