.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));