Me estoy encontrando con un patrón común en el código que estoy escribiendo, donde necesito esperar a que se completen todos los hilos de un grupo, con un tiempo de espera agotado. Se supone que el tiempo de espera es el tiempo requerido para todos los hilos para completar, simplemente haciendo thread.Join (timeout) para cada thread no funcionará, ya que el posible tiempo de espera es entonces timeout * numThreads.C#: Esperando a que terminen todos los hilos
Ahora mismo algo como lo siguiente:
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);
Sin embargo, parece que no debería haber un lenguaje más simple para este tipo de cosas.
cualquier solución final con el código fuente completo de trabajo? tal vez una muestra más compleja para notificar errores en cada hilo y después de WaitAll muestra un resumen? – Kiquenet
Eso es lo que haría, no puedo pensar en una forma más sencilla de hacerlo. – Guy