Task.Factory.StartNew или Parallel.ForEach для многих долгосрочных задач? [Дубликат]
Possible Duplicate:
Parallel.ForEach vs Task.Factory.StartNew
Мне нужно выполнить около 1000 задач вThreadPool
на ночной основе (число может увеличиться в будущем). Каждая задача выполняет длительную операцию (чтение данных из веб-службы) и являетсяnot CPU intensive. Async I/O
не вариант для этого конкретного случая использования.
УчитываяIList<string>
параметров мне нужноDoSomething(string x)
, Я пытаюсь выбрать между двумя вариантами:
IList<Task> tasks = new List<Task>();
foreach (var p in parameters)
{
tasks.Add(Task.Factory.StartNew(() => DoSomething(p), TaskCreationOptions.LongRunning));
}
Task.WaitAll(tasks.ToArray());
ИЛИ ЖЕ
Parallel.ForEach(parameters, new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount*32}, DoSomething);
Какой вариант лучше и почему?
Note :
Ответ должен включать сравнение между использованиемTaskCreationOptions.LongRunning
а такжеMaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant
.