使用任务和WaitAll进行递归

塔米姆·马纳瑟(Tamin Al Manaseer)

基本上这里是问题所在,我有一个函数“ GetAllCandidates”,该函数接受列表,计算内容,更改参数并使用Task.Factory.StartNew调用自身,以计算具有原始数组不同变体的所有可能的输出。

    private void GetAllCandidates(List<int> values)
    {
        Interlocked.Increment(ref _count);

        for (var i = values.Count - 1; i >= 1; i --)
        {
           //Do work and calculations

           Task.Factory.StartNew(
                           () => GetAllCandidatePowers(newPowers)
           );
        }
    }

我需要充分利用CPU上的内核,并等待所有任务完成,这就是问题所在。

  • 如果我为任务调用.Wait(),我的内核将无法使用(CPU使用率非常低),因此计算不会很快完成。
  • 创建任务的全局列表然后调用WaitAll无效,因为它是随机递归调用,当我的程序到达对WaitAll()的调用时,任务列表没有完全填充,而且由于计算量很大,我当我尝试将我的任务添加到全局任务列表时,出现OutOfMemoryException异常。

关于如何处理此类问题的任何提示?

usr

使GetAllCandidates本地功能列表中的任务开始。函数结束时,等待它们。只要您启动多个任务,这仍然会提供并行性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用任务和WaitAll进行递归

来自分类Dev

如何使用ant任务进行文件和目录的递归复制

来自分类Dev

使用Task.WaitAll()处理等待的任务?

来自分类Dev

使用Cron进行每周和每月的任务

来自分类Dev

使用if和else任务进行循环

来自分类Dev

使用Cron进行每周和每月的任务

来自分类Dev

子任务与WaitAll

来自分类Dev

子任务与WaitAll

来自分类Dev

处理Task.WaitAll中已取消的任务和任务异常?

来自分类Dev

使用sed和URL进行递归查找替换

来自分类Dev

使用 JSON 和 Hibernate JPA 进行无限递归

来自分类Dev

使用 ls 和递归进行 FreeBSD 自然排序

来自分类Dev

Jacoco使用Ant进行覆盖和报告任务

来自分类Dev

使用XSLT进行递归

来自分类Dev

使用 Observable 进行递归

来自分类Dev

使用 Promise 进行递归

来自分类Dev

WaitAll之后再次触发任务

来自分类Dev

WaitAll用于更改列表<任务>

来自分类Dev

使用任务与使用线程进行任务监视

来自分类Dev

使用Task.Start触发任务时卡在Task.WaitAll(tasks.ToArray())

来自分类Dev

使用Promise进行异步递归

来自分类Dev

使用MIPS进行双重递归

来自分类Dev

使用哈希图进行递归

来自分类Dev

使用 Sympy 进行代数递归

来自分类Dev

使用视图进行递归 cte

来自分类Dev

使用Crontab进行繁琐的任务

来自分类Dev

使用BlockingCollection对任务进行排队

来自分类Dev

使用BlockingCollection对任务进行排队

来自分类Dev

使用Java和递归使用二进制树进行级别顺序遍历