В двух следующих отрывках, является ли первый безопасным или вы должны сделать второй?
Под безопасностью я имею в виду, гарантированно ли каждый поток вызывает метод в Foo из той же итерации цикла, в которой был создан поток?
Или вы должны копировать ссылку на новую переменную «local» на каждой итерации цикла?
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();
}
Обновление: как указано в ответе Джона Скита, это не имеет никакого отношения к потокам.