Task.Factory.StartNew o Parallel.ForEach para muchas tareas de larga ejecución? [duplicar]

Posible duplicado:
Parallel.ForEach vs Task.Factory.StartNew

Necesito ejecutar unas 1.000 tareas en unaThreadPool por la noche (el número puede crecer en el futuro). Cada tarea está realizando una operación de larga ejecución (leer datos de un servicio web) y esno requiere mucha CPU. Async I/O No es una opción para este caso de uso particular.

Dado unIList<string> de parámetros, necesitoDoSomething(string x). Estoy tratando de elegir entre las siguientes dos opciones:

IList<Task> tasks = new List<Task>();
foreach (var p in parameters)
{
    tasks.Add(Task.Factory.StartNew(() => DoSomething(p), TaskCreationOptions.LongRunning));
}
Task.WaitAll(tasks.ToArray());

O

Parallel.ForEach(parameters, new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount*32}, DoSomething);

¿Qué opción es mejor y por qué?

Nota :

La respuesta debe incluir una comparación entre el uso deTaskCreationOptions.LongRunning yMaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant.

Respuestas a la pregunta(3)

Su respuesta a la pregunta