Task.Factory.StartNew ou Parallel.ForEach para muitas tarefas de longa duração? [duplicado]

Duplicata Possível:
Parallel.ForEach vs Task.Factory.StartNew

Eu preciso executar cerca de 1.000 tarefas em umThreadPool todas as noites (o número pode crescer no futuro). Cada tarefa está executando uma operação de longa duração (lendo dados de um serviço da Web) enão intensivo da CPU. Async I/O não é uma opção para este caso de uso específico.

Dado umIList<string> de parâmetros, eu precisoDoSomething(string x). Eu estou tentando escolher entre as duas opções a seguir:

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

OU

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

Qual opção é melhor e por quê?

Nota :

A resposta deve incluir uma comparação entre o uso deTaskCreationOptions.LongRunning eMaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant.

questionAnswers(3)

yourAnswerToTheQuestion