【发布时间】:2014-06-04 18:30:31
【问题描述】:
我已经阅读了许多关于 Access to Modified 闭包的其他问题,因此我了解了基本原理。不过,我还是不知道——Parallel.ForEach 有同样的问题吗?
以下面我重新计算上周用户使用统计的sn-p为例:
var startTime = DateTime.Now;
var endTime = DateTime.Now.AddHours(6);
for (var i = 0; i < 7; i++)
{
// this next line gives me "Access To Modified Closure"
Parallel.ForEach(allUsers, user => UpdateUsageStats(user, startTime, endTime));
// move back a day and continue the process
startTime = startTime.AddDays(-1);
endTime = endTime.AddDays(-1);
}
根据我对这段代码的了解,foreach 应该立即运行我的UpdateUsageStats 例程,并且开始/结束时间变量在下一次循环之前不会更新。这是正确的还是我应该使用局部变量来确保没有问题?
【问题讨论】:
标签: c# .net closures parallel.foreach