के अंदर रिटर्न वैल्यू और कीवर्ड समानांतर फॉरएच या लूप के लिए मान वापस करने का सही तरीका क्या है?समानांतर फॉरएच या लूप
उदाहरण के लिए निम्नलिखित कोड सही/थ्रेडसेफ है?
{
Process[] processes = Process.GetProcesses();
String ProcessName = String.Empty;
Parallel.ForEach(processes, curItem => {
if (curItem.Handle == this._handle) {
ProcessName = curItem.ProcessName;
return;
}
});
return ProcessName;
}
या यह?
{
Process[] processes = Process.GetProcesses();
List<String> ProcessNames = new List<String>();
Parallel.ForEach(processes, curItem => {
ProcessNames.Add(processes.ProcessName);
}
});
return ProcessNames;
}
अन्त के लिए या foreach पाश एक समानांतर अंदर वापसी कीवर्ड के व्यवहार क्या है?
आईई: क्या यह तुरंत सभी धागे को समाप्त कर देता है? क्या इससे कोई कलाकृतियों का कारण बन सकता है जिनकी आप उम्मीद नहीं कर सकते?
उम्मीद है कि मैं जो पूछ रहा हूं वह समझ में आता है।
पीएस: अधिक विशिष्ट होने के लिए। पहला उदाहरण देखकर स्ट्रिंग थ्रेडसेफ का मेरा संशोधन है और रिटर्न स्टेटमेंट के कारण मैं जिस मूल्य की अपेक्षा करता हूं वह है? और दूसरे उदाहरण में सूची संग्रह थ्रेडसेफ का मेरा संशोधन है? क्या मेरे द्वारा अपेक्षित सभी मूल्य जोड़े जाएंगे?
मैं इसे अवधारणा के साथ खेलने के लिए बस कर रहा हूं। मुझे लगता है कि यह शायद नहीं करता है। –
क्या यह सिर्फ मुझे है? उपर्युक्त कोड निम्न त्रुटि फेंकता है: Win32Exception उपयोगकर्ता कोड द्वारा अनचाहे किया गया था। एक्सेस अस्वीकार कर दी गई है - मुझे लगता है कि हैंडल की तुलना करने के साथ इसका कुछ संबंध है? –
मेरे मामले में नहीं, मेरे पास अपनी खुद की कस्टम विंडो क्लास है। यह प्रक्रिया ऑब्जेक्ट प्रदान नहीं करता कार्यक्षमता लागू करता है। मैं बस एक और एपीआई कॉल से बचने और अवधारणा के साथ खेलना चाहता था। ऐसा लगता है कि यह मानक लूप में भी काम नहीं करता है। ओह! –