我读过许多有关访问修改的闭包的其他问题,所以我了解基本原理。尽管如此,我还是无法判断——是吗?Parallel.ForEach
有同样的问题吗?
以下面的代码片段为例,我重新计算了上周用户的使用情况统计数据:
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
立即执行例程,开始/结束时间变量直到下一次循环才会更新。这是正确的还是我应该使用局部变量来确保没有问题?
You are访问修改后的闭包,因此它确实适用。But,您在使用它时不会更改它的值,因此假设您没有更改内部的值UpdateUsageStats
你在这里没有问题。
Parallel.Foreach
等待执行结束,然后才更改中的值startTime
and endTime
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)