C #: aguardando a conclusão de todos os threads
Estou executando um padrão comum no código que estou escrevendo, onde preciso aguardar a conclusão de todos os threads de um grupo, com um tempo limite. O tempo limite deve ser o tempo necessário paratudo Threads para concluir, basta executar thread.Join (timeout) para cada thread não funcionará, já que o tempo limite possível é timeout * numThreads.
No momento, faço algo como o seguinte:
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);
No entanto, parece que deve haver um idioma mais simples para esse tipo de coisa.