5
我使用任务并行库启动一些任务,比如:任务并行库 - 知道当所有任务完成后
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();
}
的问题是,有些任务可以创建新的任务本身。这是怎么WorkerClass
样子:
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);
}
}
对于i
每个值是3的倍数,新的任务开始。
我希望能够等到所有任务(包括由其他任务创建的任务)完成。
是否有干净/内置的方式来做到这一点(有或没有TPL)?
太好了!我不知道我错过了什么'TaskCreationOptions.AttachedToParent'选项 – GolfWolf 2012-02-26 09:09:49