Task.Factory.StartNew oder Parallel.ForEach für viele lang laufende Aufgaben? [Duplikat]

Mögliche Duplikate:
Parallel.ForEach vs Task.Factory.StartNew

Ich muss ungefähr 1.000 Aufgaben in einem ausführenThreadPool auf nächtlicher Basis (die Anzahl kann in Zukunft wachsen). Jede Task führt einen langen Vorgang aus (Lesen von Daten von einem Webdienst) und istnicht CPU-intensiv. Async I/O ist für diesen speziellen Anwendungsfall keine Option.

Angesichts einerIList<string> von Parametern muss ichDoSomething(string x). Ich versuche, zwischen den folgenden zwei Optionen zu wählen:

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

ODER

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

Welche Option ist besser und warum?

Hinweis :

Die Antwort sollte einen Vergleich zwischen der Verwendung von enthaltenTaskCreationOptions.LongRunning undMaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage