Перегрузка ForEach , которая используется здесь, указывает, что последний параметр является действием, которое вызывается для каждой завершенной задачи.
Таким образом, в конце каждой задачи результат задачи передается в метод Interlocked.Add, который увеличивает masterTotal на локальную сумму этой задачи.
Запутанная часть этой части:
taskLocalTotal =>
{
// localFinally: Invoked once per task at end
// Atomically add this task's total to the "master" total
Interlocked.Add(ref masterTotal, taskLocalTotal);
}
Просто подумайте об этом как (вы можете даже написать это):
x =>
{
// localFinally: Invoked once per task at end
// Atomically add this task's total to the "master" total
Interlocked.Add(ref masterTotal, x);
}
TaskLocalTotal, к сожалению, имеет то же имя, что и в действии Задачи.
Так что это не та же самая переменная, а просто то же имя.