हैलो मेरे पास _noOfThreads
एक समय में चलाने के लिए निर्धारित कार्यों के रूप में है। इसलिए मैं %
ऑपरेटर का उपयोग करके कार्य जारी रखता हूं और लूप के अंत में मेरे पास Tasks.WaitAll
है। यह कोड स्निपेट है।कार्य। प्रतीक्षा करें बच्चे के काम की प्रतीक्षा नहीं करता है?
for (int index = 0; index < count; index++)
{
if (index < _noOfThreads)
tasks[index] = Task.Factory.StartNew(somedelegate);
else
tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); },
TaskContinuationOptions.AttachedToParent);
}
Task.WaitAll(tasks);
हालांकि, मुझे लगता है कि यह बाल कार्यों को पूरा करने की प्रतीक्षा नहीं करता है। जैसे ही मूल कार्य पूर्ण हो जाते हैं, Task.WaitAll
के बाद अगली पंक्ति निष्पादित हो जाती है। बाल कार्यों के इंतजार के लिए मैं इस कोड को कैसे बदलूं?
की [Task.ContinueWith काम नहीं कर रहा है कि कैसे उम्मीद] (http://stackoverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
एक तरफ ध्यान दें पर संभव डुप्लिकेट, क्या आप यहां कार्य शेड्यूलिंग का निर्णय ले रहे हैं। यदि आप शेड्यूलिंग को कस्टमाइज़ करना चाहते हैं, तो आप [टास्कशेड्यूलर] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx) से प्राप्त करने पर विचार कर सकते हैं। उस ने कहा, डिफ़ॉल्ट शेड्यूलर पहले से ही थ्रेड के साथ सिस्टम को ओवरलोड नहीं करने का एक बहुत अच्छा काम करता है जब बड़ी संख्या में कार्यों को कतारबद्ध किया जाता है। –
@ डैन: यह मेरी चिंता नहीं है। मुझे नहीं पता कि यह टास्कशेड्यूलर को देना चाहता है। मेरे पास एक चर है और मैं केवल उस चर के रूप में कार्य शुरू करना चाहता हूं। संक्षेप में, मैं सेमाफोर जैसे कुछ अनुकरण करना चाहता हूं जहां आप धागे की संख्या को परिभाषित करते हैं और केवल उस संख्या के धागे कोड के उस टुकड़े को निश्चित समय पर दर्ज कर सकते हैं। –