c# - 线程池中的方法调用栈
问题描述
我有这个来源
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)
正在排队到线程池的东西。
有人可以解释我的代码是如何被处理的,为什么?
解决方案
您需要在使用它之前制作变量的本地副本,因为i
在线程看到它时会发生变化:
for (int i = 0; i < 100; i++)
{
var x = i;
Task.Run(()=> Console.WriteLine(x));
}
推荐阅读
- python - 条件布尔值:'not' 函数抛出语法错误
- android - 如何导航到不同 Activity 中的 Fragment 目的地?
- javascript - 如何在多页应用程序中实现通量架构?
- c++ - 模板需要编译时 const 值
- selenium - Selenium 控制的浏览器无法正常工作?
- java - 单列的Spring JPA查询结果为泛型类型?
- terraform-provider-azure - 引用其他资源组中的资源
- java - 如何将字符串转换为 char 数组然后将数组返回给另一个类?
- angular - Flex 材料单元,长“字”,换行
- google-sheets - 反向通配符 Vlookup