En los dos siguientes fragmentos, ¿el primero es seguro o debe hacer el segundo?
Por seguro, quiero decir, ¿se garantiza que cada hilo llame al método en Foo desde la misma iteración de bucle en el que se creó el hilo?
¿O debe copiar la referencia a una nueva variable "local" en cada iteración del ciclo?
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();
}
Actualización: como se señaló en la respuesta de Jon Skeet, esto no tiene nada que ver específicamente con el enhebrado.