我有一张物品清单。我需要给清单上的每一项都打个电话。该方法是一个复杂的方法,它需要时间来完成。我正在寻找一种方法来调用不同线程中的每个方法,然后等待全部完成。
下面是我的实际方法(现在不起作用):
List<Task> TaskList = new List<Task>();
foreach (ComplexObject co in population)
{
TaskList.Add(Task.Run(() => co.ComplexTask()));
}
Task.WaitAll(TaskList.ToArray());现在,我在ComplexTask中遇到了异常:

我可以同步执行ComplexMethod,而不会出错。
我认为我正在犯错误,我需要帮助完成这项任务/等待使用。
谢谢。
编辑:
ComplexTask:
public int ComplexTask()
{
int maquinaCubierta = 100;
int maquinasNoCubierta = -100;
int empleadoHabitual = 50;
int empleadoNoHabitual = 25;
int empleadoAVarios = 15;
int empleadoCambioTurno = -75;
int ett = -10;
fitness = 0;
bool perfecto = true;
procesarCalendario();
for (int dia = 0; dia < 5; dia++)
{
for (int turno = 0; turno < 3; turno++)
{
foreach (String key in asignaciones[dia][turno].Keys)
{
if (asignaciones[dia][turno][key] == null)
{
if (puestosSemana[dia][turno][0].Contains(key))
{
fitness += maquinaCubierta + ett;
}
else
{
fitness += maquinasNoCubierta;
perfecto = false;
}
}
else if (asignaciones[dia][turno][key].kPuesto == key)
{
fitness += maquinaCubierta;
fitness += asignaciones[dia][turno][key].kPuesto == key ? empleadoHabitual : empleadoNoHabitual;
if (asignaciones[dia][turno][key].turno != turno + 1)
{
fitness += empleadoCambioTurno;
perfecto = false;
}
}
}
fitness += empleadoAVarios * empleadosSinAsignacion[dia][turno].Count;
}
}
if(perfecto)
{
fitness = int.MaxValue;
}
return fitness;
}发布于 2022-11-03 12:38:17
可能使适应度成为一个参数,但是,如果这是一个迭代过程,则不能并行/并发地运行
我有效地使用了一个共享连接。我开始使用独特的连接,现在一切似乎都很好。
https://stackoverflow.com/questions/74302361
复制相似问题