Я прочитал ряд других вопросов о доступе к модифицированному закрытию, поэтому я понимаю основной принцип. Тем не менее, я не мог сказать - у 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
процедуру сразу и начать/конечные временные переменные не будут обновляться до следующего цикла цикла. Это правильно или я должен использовать локальные переменные, чтобы убедиться, что проблем нет?
Так ли * когда-либо * ситуация, когда 'Parallel.Foreach' будет иметь проблему с закрытием или это предупреждение только потому, что я использую лямбда? –
@drew_w Действительно. Если бы вы изменили свое значение в то время как внутри Prallel.Foreach – i3arnon
Но единственный способ сделать это - с переменной 'ref', переданной в вызывающую подпрограмму или задачу. Верный? –