Паралельно може бути в двох видах.
- Паралельні цикли
- Паралельний LINQ
Як цим користуватися?
Для паралельних операцій треба використовувати конструкції виду:
Parallel.ForEach(collection, currentElement =>
{
// щось робимо
});
Parallel.For(0, 50, i =>
{
// щось робимо
});
для зупинки Parallel.For:
Parallel.For(0, source.Length, (i, loopState) =>
{
if (i < 100)
{
double d = Compute(source[i]);
results.Push(d);
}
else
{
loopState.Stop();
return;
}
});
Дуже важливо використовувати колекції типу ConcurrentBag(T) З неймспейса System.Collections.Concurrent Інакше будуть помилки.
Що стосується LINQ то до запиту потрібно додати .AsParallel()
var test = from i in test.TestTables.AsParallel()
where i.PayDate >= date.Date
select new { PaySum = i.PaySum};
Для збереження порядку при виконанні запиту можна дописати .AsOrdered(), але це сповільнить виконання його запиту. Знову ж треба бути обережним, тому що можливі помилки пов’язаними з доступом до змінним умови.