sé por las actuales directivas codeing que he leído que no debe hacerForeach bucle y tareas
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(() => Console.WriteLine(i));
}
Console.ReadLine();
ya que escribirá 5 5 de, entiendo eso y creo que entiendo por qué está sucediendo. Sé que la solución es solo hacer
for (int i = 0; i < 5; i++)
{
int localI = i;
Task.Factory.StartNew(() => Console.WriteLine(localI));
}
Console.ReadLine();
Sin embargo, algo como esto está bien hacer?
foreach (MyClass myClass in myClassList)
{
Task.Factory.StartNew(() => myClass.DoAction());
}
Console.ReadLine();
¿O tengo que hacer lo mismo que hice en el ciclo for.
foreach (MyClass myClass in myClassList)
{
MyClass localMyClass = myClass;
Task.Factory.StartNew(() => localMyClass.DoAction());
}
Console.ReadLine();
realmente no importa el caso de, he copiado el código de http://download.microsoft.com/download/B/C/F/BCFD4868-1354-45E3 -B71B-B851CD78733D/ParallelPrograms inNET4_CodingGuidelines.pdf Realmente solo quiero saber sobre el caso Foreach. Además, mi código es un poco más complicado de lo que publiqué. mira la revisión anterior para ver lo que realmente estoy haciendo. –
Es lo mismo con 'foreach'. –
Y no solo es lo mismo entre for y foreach, sino entre value y reference types. http://stackoverflow.com/questions/235455/access-to-modified-closure Acabo de pasar la mayor parte del día intentando depurar uno de estos hasta que un colega me señaló mi error. –