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