叉/加入并行模式

时间:2011-12-01 23:12:43

标签: c# parallel-processing fork-join

线程总是有点弱,只是通过Steven Toub's Parallel Computing书。

在第39页上有下面的Fork / Join模式的例子

static T[] MyParallelInvoke<T>(params Func<T>[] functions)
{
  T[] results = new T[functions.Length];
  Parallel.For(0, functions.Length, i =>
  {
     results[i] = functions[i]();
  });
  return results;
}

// Approach #4: Using PLINQ
static T[] MyParallelInvoke<T>(params Func<T>[] functions)
{
  return functions.AsParallel().Select(f => f()).ToArray();
}

对于方法3,例如上面的例子只是为了澄清结果所有正面都有值, 当你做的时候

“返回结果”?

或者只有部分值具有取决于线程是否已完成的值?

类似于方法4,当您致电ToArray()

2 个答案:

答案 0 :(得分:1)

Parallel.For()将返回具有IsCompleted属性的ParallelLoopResult。

答案 1 :(得分:1)

是的,在这两种情况下都有一个隐含的WaitAll()

Parallel.For()之外的代码是单线程的。