Паралельно може бути в двох видах.

  1. Паралельні цикли
  2. Паралельний 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(), але це сповільнить виконання його запиту. Знову ж треба бути обережним, тому що можливі помилки пов’язаними з доступом до змінним умови.