Падение одной ямы - вы теряете способность использовать порядок в наборах.
Возьмите следующий код:
var results = new int { 0 ,1 ,2 ,3 };
var doSomethingSpecial = (from r in results.AsParallel() select r / 2).ToArray();
Вы не можете рассчитывать на результаты, приходящие по порядку, поэтому результат может быть любой перестановкой набора. Это одна из самых больших ловушек, в том смысле, что если вы имеете дело с упорядоченными данными, то вы можете потерять преимущества в производительности из-за стоимости сортировки.
Еще одна проблема - вы теряете способность ловить известные исключения. Поэтому я не смог поймать исключение нулевого указателя (не говоря уже о том, что вы должны это делать) или даже перехватить исключение FormatException.
Существует масса причин, по которым вы не всегда должны использовать Plinq во всех случаях, и я выделю еще одну. Не читайте слишком много об «автоматическом использовании непараллельного Linq», он может обрабатывать только те барьерные случаи, когда запрос прост или слишком сложен для параллельной работы.
Всегда имейте в виду, что чем больше PLINQ используется, тем больше ресурсов вы будете использовать на сервере, который отнимает у других работающих потоков.
Ресурсы:
MSDN PLNQ white paper
Пол Киммел на PLINQ