线程池中的方法调用堆栈

时间:2019-04-23 08:27:57

标签: c# task threadpool

我有这条来源

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)之类的东西正在排队到线程池中。

有人可以解释我的代码如何处理以及为什么吗?

1 个答案:

答案 0 :(得分:1)

您需要在使用变量之前对其进行本地复制,因为i会在线程看到它时更改:

for (int i = 0; i < 100; i++)
{
   var x = i;
   Task.Run(()=> Console.WriteLine(x));
}
相关问题