Parallel
Parallel статический.
Счётчик -
For,
коллекцию -
ForEach
и
ForEachAsync.
Несколько действий -
Invoke.
Запрос по ядрам -
PLINQ.
Синтаксис
Parallel.For(fromInclusive, toExclusive, body);
Parallel.ForEach(source, body);
Пример
Давайте сложить индексы
For(0, 5, ...):
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int sum = 0;
object gate = new object();
Parallel.For(0, 5, i =>
{
lock (gate)
{
sum += i;
}
});
int res = sum;
Console.WriteLine(res);
}
}
Результат выполнения кода:
10
Пример
Давайте сложить элементы массива
через ForEach:
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
Пример
Давайте дождаться двух делегатов
через Invoke:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int a = 0;
int b = 0;
Parallel.Invoke(
() => { a = 1; },
() => { b = 2; });
bool res = a == 1 && b == 2;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
For,
параллельный счётчик -
ForEachAsync,
обход с ожиданием -
Invoke,
несколько делегатов -
PLINQ,
запрос на ядрах