通过闭包传递给Task.Run()的参数问题

时间:2018-03-01 08:25:55

标签: .net task-parallel-library

我已阅读Task.Run with Parameter(s)?按照某些答案中建议的方式,我会遇到以下问题。

var tasks = new List<Task>();

for (int i = 0; i < 10; i++)
    tasks.Add(Task.Run(() => Console.WriteLine(i)));
Task.WaitAll(tasks.ToArray());

通常情况下,我希望它每次都将i的值从0传递到Task.Run()中的lambda。原来传入的实际值真的很依赖,但很可能它只是创建了所有10个任务然后运行它们,所以打印出来的只是所有10类似:10,10,10,10,10, 10,10,10,10,10。或者有时候:3,3,3,10,10,10,10,10,10,10。

那我怎么能很好地解决这个问题呢?或者在这种情况下,必须使用Task.Factory.StartNew()

1 个答案:

答案 0 :(得分:0)

尝试在循环中制作计数器的副本,如this answer中所示。 关闭这样的时刻很难解释和理解。请尝试阅读this