【问题标题】:What to use to wait on a indeterminate number of tasks?用什么来等待不确定数量的任务?
【发布时间】:2010-06-16 04:09:21
【问题描述】:

我对并行计算还很陌生,所以我不太确定使用哪种工具来完成这项工作。

我有一个System.Threading.Tasks.Task,它需要等待 n 个任务完成才能开始。棘手的部分是它的一些依赖关系可能会在此任务启动后启动(保证在它们全部完成之前你永远不会命中 0 个依赖任务)。

这是正在发生的事情

  1. 父线程创建 1 到 (NUMBER_OF_CPU_CORES - 1) 个任务。
  2. 父线程创建要在所有工作任务完成后运行的任务。
  3. 父线程创建监控线程
  4. 监控线程可能会根据负载终止工作任务或生成新任务。

我可以弄清楚第 4 步之前的所有内容。如何让第 2 步中的任务等待运行,直到第 4 步中创建的任何新工作线程完成?

【问题讨论】:

  • 您是否保留了当前活动任务的列表或计数?
  • 当前活动的任务将在一个列表中

标签: multithreading .net-4.0 task


【解决方案1】:

您可以将您正在等待的Tasks 的数组传递给TaskFactory.ContinueWhenAll,以及在它们全部完成后开始的新任务。

编辑:动态生成任务问题的可能解决方法:有两步继续;您启动的每个“依赖任务”都应该有一个链接的ContinueWith,它检查仍在运行的任务总数,如果为零,则启动实际的延续任务。这样,每个任务都会在完成后进行检查,但只有最后一个任务会启动下一阶段。当然,您需要同步对“剩余任务”计数器的访问。

【讨论】:

  • ContunueWhenAll 数组是在阻塞时被捕获还是可以在调用发生后添加到数组中?
  • 嗯,有趣的问题。实际上,我很确定它在通话时会被冻结,因此它可能不适合您的情况。
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2020-01-02
  • 2013-07-09
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多