首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行多个方法并等待它们完成C#

执行多个方法并等待它们完成C#
EN

Stack Overflow用户
提问于 2022-11-03 11:30:29
回答 1查看 53关注 0票数 -1

我有一张物品清单。我需要给清单上的每一项都打个电话。该方法是一个复杂的方法,它需要时间来完成。我正在寻找一种方法来调用不同线程中的每个方法,然后等待全部完成。

下面是我的实际方法(现在不起作用):

代码语言:javascript
复制
List<Task> TaskList = new List<Task>();
foreach (ComplexObject co in population)
{
    TaskList.Add(Task.Run(() => co.ComplexTask()));
}
Task.WaitAll(TaskList.ToArray());

现在,我在ComplexTask中遇到了异常:

我可以同步执行ComplexMethod,而不会出错。

我认为我正在犯错误,我需要帮助完成这项任务/等待使用。

谢谢。

编辑:

ComplexTask:

代码语言:javascript
复制
    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;
        }
EN

回答 1

Stack Overflow用户

发布于 2022-11-03 12:38:17

可能使适应度成为一个参数,但是,如果这是一个迭代过程,则不能并行/并发地运行

我有效地使用了一个共享连接。我开始使用独特的连接,现在一切似乎都很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74302361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档