1

スレッドに関しては常に少し苦手で、Steven Toub の Parallel Computing の本を読んでいるだけです。

39 ページには、以下のフォーク/ジョイン パターンの例があります。

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

はい、どちらの場合も暗黙的な がありWaitAll()ます。

外部のコードParallel.For()はシングルスレッドです。

于 2011-12-01T23:31:12.320 に答える
1

Parallel.For() は、IsCompleted プロパティを持つ ParallelLoopResult を返します。

于 2011-12-01T23:22:39.350 に答える