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

问题描述 投票:0回答:1

这个问题在这里已有答案:

我读过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传递到9到Task.Run()中的lambda。原来传入的实际值真的很依赖,但很可能它只创建了所有10个任务然后运行它们,所以打印出来的只是所有10s如:10,10,10,10,10,10,10,10 ,10,10。或者有时它是:3,3,3,10,10,10,10,10,10,10。

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

.net task-parallel-library
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.