comienzo a unas pocas tareas en paralelo, como esto:¿Existe un Task.WaitAll genérico?
var tasks =
Enumerable.Range(1, 500)
.Select(i => Task.Factory.StartNew<int>(ProduceSomeMagicIntValue))
.ToArray();
y luego unirlas con
Task.WaitAll(tasks);
En esta última línea consigo un marcador azul ondulada bajo tasks
, con un mensaje de advertencia:
Co-variant array conversion from Task[] to Task[] can cause run-time exception on write operation.
Entiendo por qué recibo este mensaje, pero ¿hay alguna forma de evitarlo? (Por ejemplo, como una versión genérica de Task.WaitAll()
?)
En este caso, la conversión es segura, porque 'WaitAll()' no escribirá en la matriz. ¿Hay alguna razón por la que quieres evitarlo? – svick
Además, .Net 4.5 contendrá ['Task.WhenAll()'] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.whenall%28v=vs.110% 29.aspx) que devuelve una sola 'Tarea' que se completa cuando se completan todas las' Tareas' en la colección. Y también tiene una versión genérica y funciona en cualquier 'IEnumerable' de 'Task's. –
svick
@svick thx para la propina. parece que cambiaron el nombre de lo que estás diciendo cuando todo, así que puedes decir 'esperar tarea'.WhenAll (task1, task2); ' –