Метод For
Метод For статический.
Верхняя граница не входит: при
(0, 5) индексы
0–4. Общую сумму
наращивают под lock
или через Interlocked.Add.
Коллекцию обходят
ForEach.
Синтаксис
Parallel.For(fromInclusive, toExclusive, body);
Пример
Давайте сложить индексы
с lock:
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
Пример
Давайте накопить сумму через
Interlocked.Add:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
int sum = 0;
Parallel.For(0, 5, i =>
{
Interlocked.Add(ref sum, i);
});
int res = sum;
Console.WriteLine(res);
}
}
Результат выполнения кода:
10
Пример
Давайте поймать
AggregateException
из тела:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
try
{
Parallel.For(0, 5, i =>
{
if (i == 3)
{
throw new InvalidOperationException();
}
});
}
catch (AggregateException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"