Task.Factory.StartNew lub Parallel.ForEach dla wielu długotrwałych zadań? [duplikować]

Możliwy duplikat:
Parallel.ForEach vs Task.Factory.StartNew

Muszę uruchomić około 1000 zadań wThreadPool co noc (liczba może rosnąć w przyszłości). Każde zadanie wykonuje długotrwałą operację (odczyt danych z usługi internetowej) i jestnie wymaga dużej mocy procesora. Async I/O nie jest opcją dla tego konkretnego przypadku użycia.

Biorąc pod uwagęIList<string>&nbsp;parametrów, muszęDoSomething(string x). Próbuję wybrać jedną z dwóch następujących opcji:

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

LUB

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

Która opcja jest lepsza i dlaczego?

Uwaga :

Odpowiedź powinna zawierać porównanie użyciaTaskCreationOptions.LongRunning&nbsp;iMaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant.