Подтвердить что ты не робот

AsParallel.ForAll против Parallel.ForEach

Есть ли разница между приведенными ниже фрагментами кода. Если да, то что?

myList.AsParallel().ForAll(i => { /*DO SOMETHING*/ });

и

Parallel.ForEach(mylist, i => { /*DO SOMETHING*/ });

Будет ли основной поток ждать завершения всех дочерних потоков? В приложении MVC, если я выполняю параллельную обработку в своем действии контроллера, что происходит с дочерними потоками после завершения основного потока. Будут ли они отменены или они будут завершены даже после завершения основного потока?

4b9b3361

Ответ 1

Parallel.ForEach() предназначен именно для этого типа кода.

С другой стороны, ForAll() предназначен для использования в конце (возможно сложного) запроса PLINQ.

Из-за этого, я думаю, Parallel.ForEach() - лучший выбор здесь.

В обоих случаях текущий поток будет использоваться для выполнения вычислений (наряду с некоторыми потоками из пула потоков), и метод вернется только после завершения всей обработки.

Ответ 2

У вас есть возможность заказать элементы с помощью AsParallel(). AsOrdered(). Заказ в Parallel.ForEach не из коробки, нам нужно это сделать.