【发布时间】:2016-02-27 21:29:30
【问题描述】:
我不明白为什么这似乎不能并行运行任务:
var tasks = new Task<MyReturnType>[mbis.Length];
for (int i = 0; i < tasks.Length; i++)
{
tasks[i] = CAS.Service.GetAllRouterInterfaces(mbis[i], 3);
}
Parallel.ForEach(tasks, task => task.Start());
通过逐步执行,我看到这一行一经评估:
tasks[i] = CAS.Service.GetAllRouterInterfaces(mbis[i], 3);
任务开始。我想将所有新任务添加到列表中,然后并行执行。
【问题讨论】:
-
Don't return "Cold Tasks" fix
GetAllRouterInterfaces并让它返回正在运行的任务(或者它们是否已经在运行,从你的问题很难判断)。 -
如果
GetAllRouterInterfaces是一个返回Task的async方法,它很可能应该被称为GetAllRouterInterfacesAsync
标签: c# task-parallel-library task