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

  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(), но это замедлит выполенение запроса. Опять же надо быть осторожным, т.к. возможны ошибки связанными с доступом к переменным условия.