Requiere Parallel.ForEach AsParallel ()
-
20-09-2019 - |
Pregunta
ParallelEnumerable
tiene una AsParallel
miembro estático. Si tengo una IEnumerable<T>
y desea utilizar Parallel.ForEach
implica eso que siempre debería usar AsParallel
?
por ejemplo. Son ambos correcta (todo lo demás permanece 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));
Solución
Depende de lo que se llama, son cuestiones separadas.
.AsParallel()
paralelará la enumeración no la delegación de tareas.
Parallel.ForEach
parallelized la bucle , la asignación de tareas a los subprocesos de trabajo para cada elemento.
Así que a menos que su fuente de ganancias de enumeración se conviertan en paralelo (por ejemplo reader.Match(file)
es caro), son iguales. Para su última pregunta, Sí , ambos también son correctas.
Además, hay otra construcción es posible que desee considerar que acorta un poco, todavía conseguir el máximo beneficio de PLINQ:
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));