utilizo tarea paralela Biblioteca para iniciar algunas tareas, así:Tarea Parallel Library - sepa cuando todas las tareas están terminadas
public static void Main()
{
for (var i = 0; i < 10; i++)
{
var x = i;
Task.Factory.StartNew(() => new WorkerClass(x).Do());
}
// (*) Here I'd like to wait for all tasks to finish
Task.WaitAll();
Console.WriteLine("Ready.");
Console.ReadLine();
}
El problema es que algunas tareas pueden crear nuevas tareas en sí. Esta es la forma en WorkerClass
parece:
public class WorkerClass
{
private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();
private readonly int _i;
public WorkerClass(int i)
{
_i = i;
}
public void Do()
{
if (_i % 3 == 0)
Task.Factory.StartNew(() => new WorkerClass(_i + 101).Do());
Log.Info("Started {0}", _i);
Thread.Sleep(2000);
Log.Info("Done {0}", _i);
}
}
Por cada valor de i
que es un múltiplo de 3, se inicia una nueva tarea.
Me gustaría ser capaz de esperar hasta que se hayan terminado todas las tareas (incluyendo las creadas por otras tareas).
¿Hay una manera limpia/incorporado para hacer esto (con o sin TPL)?
Gran! No sé cómo me he perdido la opción 'TaskCreationOptions.AttachedToParent' – GolfWolf