दो निम्न स्निपेट में, पहला सुरक्षित है या आपको दूसरा करना चाहिए?फोरैच पहचानकर्ता और बंद
सुरक्षित से मेरा मतलब है कि प्रत्येक थ्रेड को उसी लूप पुनरावृत्ति से Foo पर विधि को कॉल करने की गारंटी है जिसमें थ्रेड बनाया गया था?
या क्या आप लूप के प्रत्येक पुनरावृत्ति के लिए संदर्भ को एक नए चर "स्थानीय" में प्रतिलिपि बनाना चाहिए?
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Thread thread = new Thread(() => f.DoSomething());
threads.Add(thread);
thread.Start();
}
-
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Foo f2 = f;
Thread thread = new Thread(() => f2.DoSomething());
threads.Add(thread);
thread.Start();
}
अद्यतन: के रूप में जॉन स्कीट के जवाब में बताया, यह कुछ भी विशेष रूप से सूत्रण से कोई लेना देना नहीं है। के रूप में ही संदर्भ के लिए
असल में मुझे लगता है कि इसे थ्रेडिंग के साथ करना है जैसे कि आप थ्रेडिंग का उपयोग नहीं कर रहे थे, तो आप सही प्रतिनिधि को कॉल करेंगे। थ्रेडिंग के बिना जॉन स्कीट के नमूने में, समस्या यह है कि 2 लूप हैं। यहां केवल एक ही है, इसलिए कोई समस्या नहीं होनी चाहिए ... जब तक आपको पता नहीं चलेगा कि कोड कब निष्पादित किया जाएगा (जिसका अर्थ है कि यदि आप थ्रेडिंग का उपयोग करते हैं - मार्क ग्रेवेल का जवाब पूरी तरह से दिखाता है)। – user276648
संभावित डुप्लिकेट [संशोधित बंद करने के लिए एक्सेस (2)] (http://stackoverflow.com/questions/304258/access-to-modified-closure-2) – nawfal
@ user276648 इसे थ्रेडिंग की आवश्यकता नहीं है। इस व्यवहार को पाने के लिए लूप पर्याप्त होने के बाद तक प्रतिनिधियों के निष्पादन को रोकें। – binki