for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
正如预料的那样,上述代码的输出是不确定的,因为i变量在整个循环生命周期中引用同一内存位置。因此,每个线程都调用Console.Write方法输出一个值,但该值可能会在运行时发生更改。
然而,
for (int i = 0; i < 10; i++)
{
int temp = i;
new Thread (() => Console.Write (temp)).Start();
}
程序输出结果不确定!我以为变量temp只在每个循环迭代中是局部的。因此,每个线程都捕获了不同的内存位置,应该没有问题。