【问题标题】:TaskScheduler for parallel Asyc Tasks并行异步任务的任务计划程序
【发布时间】:2014-07-11 19:00:20
【问题描述】:

随时询问更多上下文。

我有一个需求,很多任务来了,他们可以大量获得。所以我想限制任务的排队,也想控制并发。到目前为止,我发现我可以创建一个自定义 TaskScheduler 来限制并发(我在这里阅读:http://msdn.microsoft.com/en-us/library/ee789351(v=vs.110).aspx),并且当排队的任务超过最大限制时,我会阻止 TaskFactory.StartNew 方法中的任务调度。以下是我的问题:

  1. 有没有更好的建议以简单的方式做到这一点,请随时提出建议。
  2. 此外,在 LimitedConcurrencyLevelTask​​Scheduler 的实现中,我看到该实现在下面使用了一个 ThreadPool。我可以使用线程池以外的东西来安排任务吗?不扩展 TaskScheduler 提供了在线程池中执行的行为,我们只需要告诉如何对任务进行排队和出队。对?
  3. 如果我们查看 Default TaskScheduler,它也使用下面的 ThreadPool。 ThreadPool 中有两个东西 MaximumConcurrencyLevel 和线程数。因此,如果我们将 MaximumConcurrencyLevel 设置为整数。然后并发级别将取决于线程池计数。两者在默认实现中如何相关。如果并发最终取决于线程池计数,那么框架中使用的 MaximumConcurrencyLevel 的意义何在?

【问题讨论】:

  • 你能格式化你的问题吗?
  • @JeroenVannevel 对不起。搞定了。
  • 不是您问题的答案,但您可能想阅读this
  • 您可以通过ForEachAsync扩展方法控制最大并发级别。详情见stackoverflow.com/a/24628962/1239433答案。

标签: c#


【解决方案1】:

您是否考虑过任何来自并行扩展的专用任务调度程序?

http://blogs.msdn.com/b/pfxteam/archive/2010/04/09/9990424.aspx

【讨论】:

  • 感谢您的链接。我仍然希望得到所有三个问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2014-09-12
  • 2020-07-25
  • 1970-01-01
相关资源
最近更新 更多