Вместо использования
(i, status, y) =>
{
return i;
}
вы должны использовать
(i, status, y) =>
{
return y + i;
}
Parallel.For
разбивает исходную последовательность на несколько разделов. Элементы в каждом разделе обрабатываются последовательно, но несколько разделов могут выполняться параллельно.
Каждый раздел имеет локальное состояние . Локальное состояние является возвращаемым значением вышеупомянутой лямбда-функции, и оно также передается как параметр y
. Поэтому причина возврата y + i
теперь должна быть понятна: вам нужно обновить локальное состояние до суммы предыдущего состояния и входного значения i
.
После обработки каждого элемента раздела окончательное значение локального состояния передается последней функции, где вы суммируете все состояния:
(x) =>
{
Interlocked.Add(ref total, x);
}