मैं वर्तमान में एक साधारण WPF फ़ाइल कॉपी ऐप लिख रहा हूं जो फ़ाइलों को समानांतर में प्रतिलिपि बनाता है। अब तक यह बहुत अच्छा काम करता है! यह वह सब कुछ करता है जो मैं चाहता हूं। आपरेशन के मांस को निम्न कोड ब्लॉक में है:समांतर फोरैच थ्रेड्स का ट्रैक रखें
Parallel.ForEach(Directory.GetFiles(dir).ToList(), file =>
{
_destDetail.CurrOp = string.Format("Copying file: {0}", Path.GetFileName(file));
File.Copy(file, file.Replace(_destDetail.Source, _destDetail.Dest), true);
if (_destDetail.Progress < _destDetail.MaxProgress)
_destDetail.Progress++;
});
मैं ParallelOptions
को लागू करने और साथ ही 4 धागे की अधिकतम संख्या को सीमित कर सकते हैं, लेकिन अगर वहाँ एक रास्ता सही ढंग से नज़र रखने के लिए है मैं सोच रहा था उस मामले में प्रत्येक धागा क्या करेगा?
उदाहरण के लिए, मेरे पास मेरे यूआई का कुछ हिस्सा है जो कॉपी ऑपरेशन की वर्तमान "स्थिति" को समर्पित है। मैं Grid
में 4 पंक्तियां रखना चाहता हूं जिनमें प्रत्येक के पास एक विशेष धागा था और वर्तमान में यह कौन सी फाइल कॉपी कर रही थी।
मैं जानता हूँ कि मैं Interlocked
उपयोग कर सकते हैं चर Parallel
पाश के बाहर हैं हेरफेर करने के लिए है, लेकिन मैं कैसे Parallel
लूप के अंदर से धागे की विशिष्ट चरों का ट्रैक रखने के हैं और यूआई अप करने के लिए रखने के लिए उन चर का उपयोग जिस तारीख पर थ्रेड किस फाइल पर काम कर रहा है?
बस एक एफवाईआई, 'फ़ाइल.कॉपी' 'समांतर' फोरेच 'के अंदर करना एक बुरा विचार है, आपको केवल सीओएल बाध्य काम पर' समांतर 'फोरेच' का उपयोग करना चाहिए, आईओ बाध्य काम के लिए इसके शेड्यूलिंग एल्गोरिदम बहुत सारे कार्यों को शुरू करें और यदि आप एक ही थ्रेड का उपयोग करके सामान्य 'foreach' लूप में फ़ाइलों की प्रतिलिपि बना चुके हैं तो यह अधिक से अधिक समय तक पूरा होने में अधिक समय लगेगा। –