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