【问题标题】:Continue tasks when current task is completed当前任务完成后继续任务
【发布时间】:2013-07-09 20:51:17
【问题描述】:

我在列表中创建了 25 个任务。我一次只能触发 10 个线程。

我需要对我的列表做一个 foreach 并使用 TPL 启动前 10 个任务。然后我想等到任何任务完成。如果任何任务完成,那么我需要继续我的 foreach 循环并开始我的第 11 个任务。同样,我需要完成清单中的 25 项任务。

有什么建议吗?

【问题讨论】:

  • 您能否更详细地解释一下您在做什么以及为什么?为什么不能使用Parallel.ForEach() 而不是Tasks?
  • 或 TPL 数据流。我发现每当 OP 担心限制时,数据流通常是一种好方法(它通常表示管道/网格场景)。

标签: .net task-parallel-library


【解决方案1】:

这是一个常见的要求。 .NET Framework 不包含内置的完美解决方案。一个很好的方法是为所有等待SemaphoreSlim 的任务创建一个包装器。信号量将强制执行您所需的并发限制。等待它之后,您可以创建并启动您想要运行的实际任务。

使用内置工具可以轻松实现此解决方案,但缺点是您必须一次启动所有 25 个任务。因此,您无法使用此技术处理非常大或无限的工作项流。在你的情况下似乎不是问题。

【讨论】:

    【解决方案2】:

    看看使用大小为 10 http://msdn.microsoft.com/en-us/library/dd997371.aspx 的 BlockingCollection 实现

    【讨论】:

    • 我认为这还不够,您应该解释一下您将如何使用BlockingCollection
    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2015-09-11
    • 2021-02-15
    相关资源
    最近更新 更多