Threadpool中的方法调用堆栈[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我有这些来源

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。

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

c# task threadpool
1个回答
0
投票

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

for (int i = 0; i < 100; i++)
{
   var x = i;
   Task.Run(()=> Console.WriteLine(x));
}
© www.soinside.com 2019 - 2024. All rights reserved.