У двох наступних фрагментах, чи безпечний перший, чи потрібно зробити другий?
Під безпекою я маю на увазі, чи кожен потік гарантовано викликає метод на 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();
}
Оновлення: Як зазначено у відповіді Джона Скіта, це не має нічого конкретного спільного з різьбленням.