200个计算任务的有效并行

时间:2013-12-07 00:42:19

标签: c# .net task-parallel-library parallel.foreach

我正在使用parallel.foreach运行200个数学任务。 什么是最有效的方法呢?

List<Task<double>> actions = new List<Task<double>>(200)
{
  Task<Double>.Factory.StartNew(() =>Tree.calc0(features)),
  Task<Double>.Factory.StartNew(() =>Tree.calc1(features)),
..................
...................
}


 Parallel.ForEach(actions, (action) => { result += action.Result; });

我希望它运行时间不超过0.5秒。当前表现 - &gt; 2.5秒 谢谢!

1 个答案:

答案 0 :(得分:2)

Factory.StartNew不仅创建了任务,而且还在运行它。

您甚至不需要创建任务,只需在calc循环内调用ForEach

您实际上需要在不运行任务的情况下创建任务

Task<double> x = new Task<double>(() => Tree.calc0(features));

然后在Parallel.ForEach开始操作。