2013-06-06 4 views
4

У меня есть коллекция классов моделей, и я не хочу отображать каждый класс отдельно для классов модели.Разница между Parallel.ForEach и ParallelEnumerable.ForAll

Я могу использовать Parallel.ForEach или ParallelEnumerable.ForAll, так в чем разница между 2, если таковые имеются?

Я ничего не нашел на MSDN.

ответ

5

Я могу использовать Parallel.ForEach или ParallelEnumerable.ForAll, так в чем разница между 2, если таковые имеются?

Parallel.ForEach является equivelent с использованием foreach в обычном коде.

Метод ParallelEnumerable.ForAll фактически эквивалентен List<T>.ForEach.

Оба будут работать и работать аналогичным образом, хотя метод ForAll требует, чтобы вы уже использовали PLINQ, так как вам нужен ParallelEnumerable. Parallel.ForEach работает непосредственно с любого IEnumerable<T>.

В общем, я предпочитаю Parallel.ForEach, так как единственная цель ForAll - вызвать побочные эффекты. Есть некоторые недостатки, связанные с этим: described in detail by Eric Lippert.

+0

хм, так что в основном они почти идентичны, за исключением того факта, что 'ParallelEnumerable' требует фактического' ParallelEnumerable'. –

+0

Я согласен с частью побочного эффекта, но я хочу сопоставлять элементы параллельно. В этом случае я думаю, что это действительно так. Исправьте меня, если я ошибаюсь, но 'Parallel.ForEach' действительно выполняет итерации параллельно ... правильно? –

+0

@StanR. Да. «Сопоставление» предлагает предложение PLINQ Select(), а не оператор 'ForAll()', хотя, поскольку Select является фактически операцией отображения ... –