这个问题在这里已有答案:
我有这些来源
for (int i = 0; i < 100; i++)
{
Task.Run(()=> Console.WriteLine(i));
}
我期待输出像0,1,2,3,...,99,但我得到的是100,100,100,...,100
我不是要求获得我想要的输出的解决方案,所有我问的是什么呼叫正在排队到Threadpool。
我想像Console.Writeline(reference on i)
正在排队到Threadpool。
有人能解释我的代码是如何处理的,为什么?
您需要在使用变量之前制作变量的本地副本,因为i
将在线程看到它时发生变化:
for (int i = 0; i < 100; i++)
{
var x = i;
Task.Run(()=> Console.WriteLine(x));
}