简单复印面食这里:.NET 4.0:请帮我解决这个问题的任务
static void Main(string[] args)
{
List<Task> Tasks = new List<Task>();
Random r = new Random();
for (int o = 0; o < 5; o++)
Tasks.Add(Task.Factory.StartNew(() => { int i = r.Next(0, 3000); Thread.Sleep(i); Console.WriteLine("{0}: {1}", o, i); }));
Task.WaitAll(Tasks.ToArray());
Console.Read();
}
当您运行,你会得到这样的事情:
5: 98
5: 198
5: 658
5: 1149
5: 1300
什么我不理解对这个?当我期望以随机顺序看到数字0到4时,编写o
的每次迭代对于所有线程显示为5。
我尝试使用实际的方法,而不是匿名,它做同样的事情。我错过了什么?
编辑:我刚刚发现我的第一篇文章的问题,并编辑了问题,所以很抱歉,如果你回答有关不正确的订单问题。不过,我很好奇为什么o
写得不好。
我是不知道我明白。你能提供代码,以便我能看到你的意思吗? – oscilatingcretin
工作正常!我仍然不明白这个“关闭循环变量”的东西,但我只需要阅读更多的内容。 – oscilatingcretin
@ scilatingcretin:Eric Lippert的文章链接上面,让人有一个好读 – BrokenGlass