Does Parallel.ForEach require AsParallel()
.net-4.0, plinq, task-parallel-library
Solution
It depends on what's being called, they are separate issues.
`.AsParallel()` Parallelizes the enumeration not the delegation of tasks.
`Parallel.ForEach` Parallelized the loop, assigning tasks to worker threads for each element.
So unless your source enumeration gains from becoming parallel (e.g. `reader.Match(file)` is expensive), they are equal. To your last question, yes, both are also correct.
Also, there's one other construct you may want to look at that shortens it a bit, still getting maximum benefit of PLINQ:
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
Problem
`ParallelEnumerable` has a static member `AsParallel`. If I have an `IEnumerable<T>` and want to use `Parallel.ForEach` does that imply that I should always be using `AsParallel`? e.g. Are both of these correct (everything else being equal)? without `AsParallel`: ``` List<string> list = new List<string>(); Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f)); ``` or with `AsParallel`? ``` List<string> list = new List<string>(); Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f)); ```