【发布时间】:2014-07-11 19:00:20
【问题描述】:
随时询问更多上下文。
我有一个需求,很多任务来了,他们可以大量获得。所以我想限制任务的排队,也想控制并发。到目前为止,我发现我可以创建一个自定义 TaskScheduler 来限制并发(我在这里阅读:http://msdn.microsoft.com/en-us/library/ee789351(v=vs.110).aspx),并且当排队的任务超过最大限制时,我会阻止 TaskFactory.StartNew 方法中的任务调度。以下是我的问题:
- 有没有更好的建议以简单的方式做到这一点,请随时提出建议。
- 此外,在 LimitedConcurrencyLevelTaskScheduler 的实现中,我看到该实现在下面使用了一个 ThreadPool。我可以使用线程池以外的东西来安排任务吗?不扩展 TaskScheduler 提供了在线程池中执行的行为,我们只需要告诉如何对任务进行排队和出队。对?
- 如果我们查看 Default TaskScheduler,它也使用下面的 ThreadPool。 ThreadPool 中有两个东西 MaximumConcurrencyLevel 和线程数。因此,如果我们将 MaximumConcurrencyLevel 设置为整数。然后并发级别将取决于线程池计数。两者在默认实现中如何相关。如果并发最终取决于线程池计数,那么框架中使用的 MaximumConcurrencyLevel 的意义何在?
【问题讨论】:
-
你能格式化你的问题吗?
-
@JeroenVannevel 对不起。搞定了。
-
不是您问题的答案,但您可能想阅读this
-
您可以通过
ForEachAsync扩展方法控制最大并发级别。详情见stackoverflow.com/a/24628962/1239433答案。
标签: c#