पूरा कर लें मैं टास्क समानांतर लाइब्रेरी इसलिए की तरह, कुछ कार्यों के शुरू करने के लिए का उपयोग करें:टास्क समानांतर लाइब्रेरी - पता है जब सभी कार्य
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();
}
समस्या यह है कि कुछ कार्यों नए कार्य के लिए खुद बना सकते हैं।
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);
}
}
3 की एक बहु है कि i
के हर मूल्य के लिए, एक नया कार्य शुरू कर दिया गया है: यह कैसे WorkerClass
लग रहा है की तरह है।
मैं सभी कार्यों (अन्य कार्यों द्वारा बनाए गए समेत) तक प्रतीक्षा करने में सक्षम होना चाहता हूं।
क्या ऐसा करने के लिए एक साफ/अंतर्निहित तरीका है (टीपीएल के साथ या बिना)?
बढ़िया! मुझे नहीं पता कि मैंने 'TaskCreationOptions.AttachedToParent' विकल्प को कैसे याद किया है – GolfWolf