Quote:
Originally Posted by supercracker13
Zusätztlich kam das Problem daszu das bei den Code daoben die Ausgabe jetzt immer das selbe ist also bei dowork wird immer das selbe ausgegeben.
|
Es wird keine (lokale) Kopie von i im Lambda referenziert, sondern direkt i. Das heißt, dass bis dahin das Programm z. B. folgendes tun könnte:
1. Das Erstellen von Thread eins, zwei und drei an Windows wird an Windows gemeldet, derweil wird i inkrementiert.
2. Thread zwei wurde gestartet und greift auf i zu. Das Auswerten von i ergibt den Wert 4. Dieser wird dann verwendet.
Du kannst direkt vor der Zeile mit dem Lambda ein
var copy = i; einfügen und dann die Kopie verwenden, wie du es erwartest.
Wenn du eine
foreach-Schleife verwendest, erhälst du ebenfalls das erwartete Verhalten.
Was du scheinbar zu erstellen versuchst, ist eine Art Thread Pool. Sofern nicht zu Lehrzwecken, solltest du versuchen, das bereits Vorhandene zu verwenden, wie z. B. die TPL.
Intern wird in der Regel eine Liste von durchzuführenden Aufgaben unterhalten, von welcher sich jeder Arbeits-Thread bedient.