1

在线程方面总是有点弱,只是通过Steven Toub 的并行计算书。

在第 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()

4

2 回答 2

1

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

于 2011-12-01T23:22:39.350 回答
1

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

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

于 2011-12-01T23:31:12.320 回答