На мой взгляд, наиболее реалистичный сценарий - это когда задачи требуют тяжелой операции. Подход Shivprasad фокусируется больше на создании объектов / распределении памяти, чем на самих вычислениях. Я провел исследование, назвав следующий метод:
public static double SumRootN(int root)
{
double result = 0;
for (int i = 1; i < 10000000; i++)
{
result += Math.Exp(Math.Log(i) / root);
}
return result;
}
Выполнение этого метода занимает около 0,5 с.
Я назвал это 200 раз, используя Parallel:
Parallel.For(0, 200, (int i) =>
{
SumRootN(10);
});
Тогда я назвал это 200 раз, используя старомодный способ:
List<Task> tasks = new List<Task>() ;
for (int i = 0; i < loopCounter; i++)
{
Task t = new Task(() => SumRootN(10));
t.Start();
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
Первый случай завершен за 26656мс, второй за 24478мс. Я повторил это много раз. Каждый раз второй подход незначительно быстрее.