首页 > 解决方案 > 线程池中的方法调用栈

问题描述

我有这个来源

for (int i = 0; i < 100; i++)
{
   Task.Run(()=> Console.WriteLine(i));
}

我期待像 0,1,2,3,...,99 这样的输出,但我得到的只是 100,100,100,...,100

我不是在寻求解决方案来获得我想要的输出,我只是在问什么调用正在排队到线程池。

我想像Console.Writeline(reference on i)正在排队到线程池的东西。

有人可以解释我的代码是如何被处理的,为什么?

标签: c#taskthreadpool

解决方案


您需要在使用它之前制作变量的本地副本,因为i在线程看到它时会发生变化:

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

推荐阅读