Я могу использовать 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.
хм, так что в основном они почти идентичны, за исключением того факта, что 'ParallelEnumerable' требует фактического' ParallelEnumerable'. –
Я согласен с частью побочного эффекта, но я хочу сопоставлять элементы параллельно. В этом случае я думаю, что это действительно так. Исправьте меня, если я ошибаюсь, но 'Parallel.ForEach' действительно выполняет итерации параллельно ... правильно? –
@StanR. Да. «Сопоставление» предлагает предложение PLINQ Select(), а не оператор 'ForAll()', хотя, поскольку Select является фактически операцией отображения ... –