【问题标题】:Method call stack in the Threadpool [duplicate]线程池中的方法调用堆栈[重复]
【发布时间】:2019-04-23 08:27:57
【问题描述】:

我有这行来源

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

谁能解释我的代码是如何被处理的以及为什么?

【问题讨论】:

  • 您是否至少尝试过在 Google 上搜索“C# 循环启动任务”?第一个结果指向此处已经提出的类似问题
  • 正如我所说,我不是在寻找解决方案。我正在寻找排队到 ThreadPool 的内容。 (是的“发送”不是正确的词)

标签: c# task threadpool


【解决方案1】:

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

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

【讨论】:

  • @canton7 最后一点不正确
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2021-05-26
  • 2015-07-02
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多