質問

ParallelEnumerableは静的メンバーAsParallelを有しています。私はIEnumerable<T>を持っているし、それは私がいつもParallel.ForEachを使用する必要があることを意味するものではないAsParallelを使用したい場合は?

例えば。 これらの正しい(他のすべて等しい)の両方がありますか?

AsParallelなします:

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));

またはAsParallelと?

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
役に立ちましたか?

解決

これは呼ばれているものに依存して、彼らは別の問題である。

.AsParallel()を列挙のないタスクの委任を並列ます。

Parallel.ForEach並列化のループは、各要素のワーカースレッドにタスクを割り当てる。

だから、平行になってからソース列挙利益がない限り(例えばreader.Match(file)は高価である)、彼らは同じです。あなたの最後の質問に、はい、両方のも正しいです。

また、まだPLINQの最大の利益を得て、あなたはそれを見てみたいことがあり一つの他の構築物が、それを少し短縮があります:

GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top