.net 4.0 - run - ¿Parallel.ForEach requiere AsParallel()
task factory startnew example c# (1)
Depende de lo que se llame, son temas separados.
.AsParallel() la enumeración y no la delegación de tareas.
Parallel.ForEach Paralea el bucle , asignando tareas a subprocesos de trabajo para cada elemento.
Entonces, a menos que su enumeración de origen se convierta en paralelo (por ejemplo, reader.Match(file) es costoso), son iguales. A tu última pregunta, sí , ambas también son correctas.
Además, hay otra construcción que quizás quieras ver que la acorta un poco, aún obteniendo el máximo beneficio de PLINQ:
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
ParallelEnumerable tiene un miembro estático AsParallel . Si tengo un IEnumerable<T> y quiero usar Parallel.ForEach ¿eso implica que siempre debería usar AsParallel ?
Por ejemplo, ¿son correctos ambos (todo lo demás es igual)?
sin AsParallel :
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
o con AsParallel ?
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));