Ho il seguente codice che crea 10 thread che a sua volta scrivere messaggi alla console:variabili acquisite in ParameterizedThreadStart
for (int i = 0; i < 10; i++)
{
{
Thread thread = new Thread((threadNumber) =>
{
for (int j = 0; j < 10; j++)
{
Thread.Sleep(200);
Console.WriteLine(string.Format("Thread: {0}, Line: {1}", threadNumber, j));
}
});
thread.Start(i);
}
}
mia comprensione è che ParameterizedThreadStart
prende un oggetto per il quale viene inviata una copia del riferimento al thread. In tal caso, poiché non ho effettuato una copia locale di i
all'interno di ciascun ciclo, tutti i nuovi thread punterebbero alla stessa posizione di memoria, il che significa che determinati numeri di thread potrebbero essere "persi". Avendo eseguito questo però (e anche contro un numero maggiore di thread/sleep time) ogni valore di i
ha il suo thread. Qualcuno può spiegare perché?
Grazie per la spiegazione dettagliata Chris, è stata la copia in base al valore che mi stava facendo incazzare! – Maverick
@ Nota di salvataggio anche nel caso di "errore" che dà, è comunque possibile ottenere il risultato corretto aggiungendo una riga 'var i1 = i' prima della chiusura e usando' i1' ovunque si usi 'i'. – lobsterism