AsParallel.ForAll vs Parallel.ForEach

Dha*_*wal 33 c# parallel-processing task-parallel-library

以下代码片段之间是否有任何区别?如果是这样,什么?

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

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

主线程是否会等待所有子线程完成?在MVC应用程序中,如果我在控制器操作中进行并行处理,主线程完成后子线程会发生什么.他们会被中止还是会在主线完成后完成?

svi*_*ick 22

Parallel.ForEach() 适用于这种代码.

另一方面,ForAll()旨在用于(可能复杂的)PLINQ查询的末尾.

因此,我认为这Parallel.ForEach()是更好的选择.

在这两种情况下,当前线程将用于执行计算(以及来自线程池的一些线程),并且该方法仅在所有处理完成后才返回.

  • 为什么ForAll()打算在PLINQ查询结束时使用? (3认同)
  • @AranMulholland根据[Reed Copsey](http://reedcopsey.com/2010/02/03/parallelism-in-net-part-8-plinqs-forall-method/)并行查询由Parallel.Foreach使用()必须支付两次平行化的费用.而ForAll()使用查询中的现有分区/线程. (2认同)