任务启动过程中变量的变化
本文关键字:变化 变量 过程中 任务启动 | 更新日期: 2023-09-27 18:13:13
我真的很困惑。我运行以下代码来执行两个任务,它们在不同的文件夹上工作,这就是为什么我给它们index。不幸的是,当我运行下面的代码时,传递给ProcessingTask
静态方法的索引总是2…
tasks = new Task[sets.ThreadCount];
for (int i = 0; i < sets.ThreadCount; i++)
{
tasks[i] = Task.Factory.StartNew
(
() =>
{
ProcessingTask.run(
i,
stack,
collector,
sets,
cts.Token,
LOG
);
},
cts.Token,
TaskCreationOptions.LongRunning,
TaskScheduler.Default
);
}
任何想法?
您应该将i放入一个临时变量中并使用它,即
int iTemp = i;
tasks[i] = Task.Factory.StartNew(() => {
ProcessingTask.run(
iTemp,
stack,
collector,
sets,
cts.Token,
LOG
);
},
cts.Token,
TaskCreationOptions.LongRunning,
TaskScheduler.Default
);
见http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx