for (int i = 1; i < 100; i++) { ThreadPool.QueueUserWorkItem((o) => { int z = i; Thread.Sleep(1000); Console.Write(z.ToString()); Console.Write(Environment.NewLine); }); }
为啥输出的都是100呢,,不是用z保存了变量了吗
9 回答
隔江千里
TA贡献1906条经验 获得超10个赞
for (int i = 1; i < 100; i++) { ThreadPool.QueueUserWorkItem((o) => { int z = (int)o; Thread.Sleep(1000); Console.Write(z.ToString()); Console.Write(Environment.NewLine); },i); }
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
老兄位置放错啦!~
看我这个吧:
for (int i = 1; i < 100; i++)
{
ThreadPool.QueueUserWorkItem(start =>
{
int z = i;
Console.WriteLine(z.ToString());
});
Thread.Sleep(1);//在循环中需要调用一下,由于被置于ThreadPool中的操作是异步,所以还没有来的执行,z就被for循环改变,永远是100
}
汪汪一只猫
TA贡献1898条经验 获得超8个赞
i是公共的变量。你所有的100个后台的线程都是有了它,这个情况下你输出的时候,主线程for循环已经走完,此时i是100,你说不是100,难道是1 , 2, 3。。。。。 什么的
如果要输入1,2,3.....
for (int i = 1; i < 100; i++) {
int z = i; ThreadPool.QueueUserWorkItem((o) => { Thread.Sleep(1000); Console.Write(z.ToString()); Console.Write(Environment.NewLine); }); }
- 9 回答
- 0 关注
- 363 浏览
添加回答
举报
0/150
提交
取消