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));
¿Fue útil?

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, , 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));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top