Ich habe ein Beispiel, dass ich jedes Mal brechen kann, wenn ich einen Iterator benutze, aber es funktioniert gut mit einer for-Schleife. Der gesamte Code verwendet für die ausführende Methode lokale Variablen. Ich bin ratlos. Es gibt entweder eine Tatsache über Iteratoren, die mir nicht bekannt sind, oder es gibt einen "ehrlich zu gut" -Bug in .Net. Ich wette auf Ersteres. Bitte helfen.Warum sollte ein Iterator (.Net) in diesem Code unzuverlässig sein?
Dieser Code funktioniert zuverlässig jedes Mal. Es durchläuft alle Elemente nacheinander (z. B. 10) und startet einen neuen Thread, wobei die Ganzzahl als Argument in einer Methode an den neuen Thread übergeben wird. Es startet 10 Fäden, einen für jeden Gegenstand. 1,2,3,4,5,6,7,8,9,10 - das funktioniert immer.
ARBEITSCode:
//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();
}
Und dieser Code tatsächlich Elemente wiederholen. Es durchläuft alle Elemente nacheinander (z. B. 10) und startet einen neuen Thread. Es startet 10 Threads, aber nicht alle 10 ganzen Zahlen. Ich sehe es beginnen 1,2,3,3,6,7,7,8,9,10. Ich verliere Zahlen.
BUSTED CODE:
//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();
}
als Notiz, sind die wiederholten ganzen Zahlen nicht immer die gleich. es scheint zufällig zu sein. –