मेरे पास एक उदाहरण है कि जब भी मैं एक इटरेटर का उपयोग करता हूं तो मैं ब्रेक कर सकता हूं, लेकिन यह लूप के साथ ठीक काम करता है। सभी कोड निष्पादन विधि के लिए स्थानीय चर का उपयोग करता है। मैं फंस गया हूँ या तो इटरेटर के बारे में एक तथ्य है कि मुझे पता नहीं है, या नेट में भलाई बग के लिए ईमानदार है। मैं पूर्व पर सट्टेबाजी कर रहा हूँ। कृपया मदद करें।इस कोड में एक पुनरावर्तक (.Net) अविश्वसनीय क्यों होगा
यह कोड विश्वसनीय रूप से हर बार काम करता है। यह किसी भी समय एक तत्व के रूप में नए धागे के पूर्णांक को पार करते हुए, एक समय में सभी तत्वों को एक बार में छोड़ देता है और एक नया धागा शुरू करता है। यह 10 धागे शुरू करता है, प्रत्येक आइटम के लिए एक। 1,2,3,4,5,6,7,8,9,10 - यह हमेशा काम करता है।
काम कोड:
//lstDMSID is a populated List<int> with 10 elements.
for(int i=0; i<lstDMSID.Count; i++)
{
int dmsId = lstDMSID[i];
ThreadStart ts = delegate
{
// Perform some isolated work with the integer
DoThreadWork(dmsId);
};
Thread thr = new Thread(ts);
thr.Name = dmsId.ToString();
thr.Start();
}
और यह कोड वास्तव में तत्वों को दोहराएँ। यह एक बार में सभी तत्वों के माध्यम से (चलो 10 कहें) और एक नया धागा शुरू करता है। यह 10 धागे शुरू करता है, लेकिन यह विश्वसनीय रूप से सभी 10 पूर्णांक प्राप्त नहीं करता है। मुझे लगता है कि यह 1,2,3,3,6,7,7,8,910 शुरू हो रहा है। मैं संख्या खो रहा हूँ।
पर्दाफाश कोड:
//lstDMSID is a populated List<int> with 10 elements.
foreach(int dmsId in lstDMSID)
{
ThreadStart ts = delegate
{
// Perform some isolated work with the integer
DoThreadWork(dmsId);
};
Thread thr = new Thread(ts);
thr.Name = dmsId.ToString();
thr.Start();
}
, बार-बार पूर्णांकों हमेशा नहीं कर रहे हैं वही। यह यादृच्छिक प्रतीत होता है। –