tôi sử dụng Task Song song Library để bắt đầu một số nhiệm vụ, như vậy:công tác song song Thư viện - Biết khi nào tất cả các nhiệm vụ được hoàn thành
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();
}
Vấn đề là một số nhiệm vụ có thể tạo ra nhiệm vụ mới bản thân. Đây là cách WorkerClass
trông giống như:
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 với mỗi giá trị của i
đó là một bội số của 3, một công tác mới được bắt đầu.
Tôi muốn có thể đợi cho đến khi tất cả các tác vụ (bao gồm cả các tác vụ được tạo bởi các tác vụ khác) được hoàn thành.
Có cách nào sạch sẽ/tích hợp để thực hiện việc này (có hoặc không có TPL) không?
Tuyệt vời! Tôi không biết làm thế nào tôi đã bỏ lỡ tùy chọn 'TaskCreationOptions.AttachedToParent' – GolfWolf