我已阅读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()
?