startnew run programming parallel net for example csharp .net-4.0 plinq task-parallel-library

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