编程语言
首页 > 编程语言> > c# – Parallel.ForEach – 访问修改后的闭包适用?

c# – Parallel.ForEach – 访问修改后的闭包适用?

作者:互联网

我已经阅读了一些关于访问修改闭包的其他问题,所以我理解了基本原理.不过,我无法分辨 – 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例程,并且开始/结束时间变量将不会更新,直到下一次循环.这是正确的还是我应该使用局部变量来确保没有问题?

解决方法:

您正在访问修改后的闭包,因此它确实适用.但是,您在使用它时不会更改其值,因此假设您没有更改UpdateUsageStats中的值,则此处没有问题.

Parallel.Foreach等待执行结束,然后才改变startTime和endTime中的值.

标签:c,closures,net,parallel-foreach-2
来源: https://codeday.me/bug/20190528/1173742.html