je sais que des guidlines de codeing que j'ai lu, vous ne devriez pas faireboucle Foreach et les tâches
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(() => Console.WriteLine(i));
}
Console.ReadLine();
comme il rédigera 5 5 de, je comprends et je pense que je comprends pourquoi cela se produit. Je sais que la solution est juste de faire
for (int i = 0; i < 5; i++)
{
int localI = i;
Task.Factory.StartNew(() => Console.WriteLine(localI));
}
Console.ReadLine();
Cependant, quelque chose comme ça est ok à faire?
foreach (MyClass myClass in myClassList)
{
Task.Factory.StartNew(() => myClass.DoAction());
}
Console.ReadLine();
Ou dois-je faire la même chose que j'ai fait dans la boucle for.
foreach (MyClass myClass in myClassList)
{
MyClass localMyClass = myClass;
Task.Factory.StartNew(() => localMyClass.DoAction());
}
Console.ReadLine();
Je ne me soucie pas vraiment du cas pour, je viens de copier le code de http://download.microsoft.com/download/B/C/F/BCFD4868-1354-45E3 -B71B-B851CD78733D/ParallelPrograms inNET4_CodingGuidelines.pdf Je veux juste juste savoir à propos de l'affaire foreach. Aussi mon code est un peu plus compliqué que ce que j'ai posté. regarde la révision précédente pour voir ce que je fais vraiment. –
C'est la même chose avec 'foreach'. –
Et non seulement est-il le même entre for et foreach, mais entre la valeur et les types de référence. http://stackoverflow.com/questions/235455/access-to-modified-closure Je viens de passer une bonne partie de la journée à essayer de déboguer l'un d'eux jusqu'à ce qu'un collègue me signale mon erreur. –