我有这条来源
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)
之类的东西正在排队到线程池中。
有人可以解释我的代码如何处理以及为什么吗?
答案 0 :(得分:1)
您需要在使用变量之前对其进行本地复制,因为i
会在线程看到它时更改:
for (int i = 0; i < 100; i++)
{
var x = i;
Task.Run(()=> Console.WriteLine(x));
}