在以下两个片段中,第一个是安全的还是必须做第二个?
安全我的意思是每个线程都保证从创建线程的同一个循环迭代中调用 Foo 上的方法?
还是必须将对新变量“本地”的引用复制到循环的每次迭代中?
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();
}
更新:正如 Jon Skeet 的回答所指出的,这与线程没有任何关系。