- मुझे एक I/O गहन ऑपरेशन मिला है।
- मैं केवल एक बार में अधिकतम 5 धागे चलाना चाहता हूं।
- मुझे कतार और पूर्ण करने के लिए 8000 कार्य मिल गए हैं।
- प्रत्येक कार्य निष्पादित करने के लिए लगभग 15-20seconds लेता है।
मैं चारों ओर ThreadPool को देखा है, लेकिनथ्रेडपूल निराशा - सेटमैक्स थ्रेड्स से अधिक थ्रेड निर्माण
ThreadPool.SetMaxThreads(5, 0);
List<task> tasks = GetTasks();
int toProcess = tasks.Count;
ManualResetEvent resetEvent = new ManualResetEvent(false);
for (int i = 0; i < tasks.Count; i++)
{
ReportGenerator worker = new ReportGenerator(tasks[i].Code, id);
ThreadPool.QueueUserWorkItem(x =>
{
worker.Go();
if (Interlocked.Decrement(ref toProcess) == 0)
resetEvent.Set();
});
}
resetEvent.WaitOne();
मैं समझ नहीं क्यों ... मेरे कोड एक समय में अधिक से अधिक 5 धागे को क्रियान्वित कर रहा है। मैंने setmaxthreads, setminthreads को करने का प्रयास किया है, लेकिन यह 5 से अधिक धागे निष्पादित करता रहता है।
क्या हो रहा है? मैं क्या खो रहा हूँ? क्या मुझे इसे किसी अन्य तरीके से करना चाहिए?
धन्यवाद
आपने डीबगर में ** tasks.Count ** का मान सत्यापित किया है? क्या आपने इसके बजाए बस "5" डालने की कोशिश की है? –
कार्य सरणी में ~ 8000 ऑब्जेक्ट्स हैं – Mike