Я знаю из codeing инструкций, что читал, Вы не должны делать
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(() => Console.WriteLine(i));
}
Console.ReadLine();
как это запишет 5 5's, я понимаю, что и думаю, что я понимаю, почему это происходит. Я знаю, что решение состоит в том, чтобы только сделать
for (int i = 0; i < 5; i++)
{
int localI = i;
Task.Factory.StartNew(() => Console.WriteLine(localI));
}
Console.ReadLine();
Однако что-то вроде этого в порядке, чтобы сделать?
foreach (MyClass myClass in myClassList)
{
Task.Factory.StartNew(() => myClass.DoAction());
}
Console.ReadLine();
Или сделайте я должен сделать то же самое, в котором я выполнил для цикла.
foreach (MyClass myClass in myClassList)
{
MyClass localMyClass = myClass;
Task.Factory.StartNew(() => localMyClass.DoAction());
}
Console.ReadLine();
Это абсолютно такая же проблема с foreach
.
foreach (MyClass myClass in myClassList)
{
Task.Factory.StartNew(() => myClass.DoAction());
}
скорее всего, всегда будет вызывать метод DoAction на последнем элементе списка, что можно исправить следующим образом:
foreach (MyClass myClass in myClassList)
{
MyClass localMyClass = myClass;
Task.Factory.StartNew(() => localMyClass.DoAction());
}
Но вместо того, чтобы полагаться на локальные переменные, я бы порекомендовал вам следующее:
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(localI => Console.WriteLine(localI), i);
}