for (int j = 0; j < 100; j++)
{
Task.Factory.StartNew(() => { Console.WriteLine(j); }, TaskCreationOptions.PreferFairness);
}
以上输出的是 100 个99,因为j被缓存,所以最后一次的值被存了下来,其他值被替代
{
Task.Factory.StartNew(() => { Console.WriteLine(j); }, TaskCreationOptions.PreferFairness);
}
以上输出的是 100 个99,因为j被缓存,所以最后一次的值被存了下来,其他值被替代
for (int j = 0; j < 100; j++)
{
int tmp = j;
Task.Factory.StartNew(() => { Console.WriteLine(tmp); }, TaskCreationOptions.PreferFairness);
}
{
int tmp = j;
Task.Factory.StartNew(() => { Console.WriteLine(tmp); }, TaskCreationOptions.PreferFairness);
}
以上输出的是1,2,3,....99 值;
原因是:j在这里是全局变量,缓存了值。而tmp 在这里是局部变量,没有缓存值。
原因是:j在这里是全局变量,缓存了值。而tmp 在这里是局部变量,没有缓存值。