Метод ForEach
Метод ForEach статический.
Порядок вызовов не фиксирован -
в примерах печатают только сумму.
Общий результат защищают
lock. Асинхронный вариант -
ForEachAsync.
Индексы -
For.
Синтаксис
Parallel.ForEach(source, body);
Пример
Давайте сложить
{ 1, 2, 3, 4, 5 }:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int[] data = { 1, 2, 3, 4, 5 };
int sum = 0;
object gate = new object();
Parallel.ForEach(data, x =>
{
lock (gate)
{
sum += x;
}
});
int res = sum;
Console.WriteLine(res);
}
}
Результат выполнения кода:
15
Пример
Давайте использовать
Interlocked.Add:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int[] data = { 1, 2, 3, 4, 5 };
int sum = 0;
Parallel.ForEach(data, x =>
{
Interlocked.Add(ref sum, x);
});
int res = sum;
Console.WriteLine(res);
}
}
Результат выполнения кода:
15
Пример
Давайте обойти пустой массив:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int[] data = { };
int sum = 0;
Parallel.ForEach(data, x =>
{
sum += x;
});
int res = sum;
Console.WriteLine(res);
}
}
Результат выполнения кода:
0
Смотрите также
-
ForEachAsync,
сawait -
For,
по индексам -
PLINQ,
AsParallel -
Parallel,
обзор класса