【问题标题】:TPL - How can I force TPL to use fixed # of threads? not lessTPL - 如何强制 TPL 使用固定的线程数?不低于
【发布时间】:2011-03-08 17:00:29
【问题描述】:

如何强制 TPL 使用固定数量的线程?我知道 MaxDegreeOfParallelism 可以用来设置上限,但我希望上限等于下限。这可能吗?怎么样?

因为我知道有人会问 =) 是的,我确定我想这样做,是的,它最适合我的场景。 =)

编辑
该解决方案需要自定义 Partitioner 以及自定义 TaskScheduler http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/thread/002ff888-6e13-4d7e-a234-1632e8a1f551

【问题讨论】:

    标签: c# .net-4.0 task-parallel-library


    【解决方案1】:

    如果确实需要,您可以创建自己的 TaskScheduler,但使用 TaskCreationOptions.LongRunning 可能是最好的方法。

    How to: Create a Task Scheduler That Limits the Degree of Concurrency

    【讨论】:

    • 无法弄清楚如何将 LongRunning 与 Parallel.ForEach 一起使用。有什么建议吗?
    • 您在我的编辑中添加的链接和链接可以解决问题。
    【解决方案2】:

    您是否尝试在创建任务时使用TaskCreationOptions.LongRunning?这只是一个提示,但我相信它可能会有所帮助:

    指定任务将是长时间运行的粗粒度操作。它向 TaskScheduler 提示可能需要超额订阅。

    这可能会超额订阅它超出 MaxDegreeOfParallelism 当然...您可能应该尝试找到详细解释它的资源。顺便问一下,您是如何创建任务的?

    【讨论】:

    • 嗨乔恩 - 好建议!我会更深入地研究它是否会超额订阅。我正在通过 Parallel.ForEach 创建我的任务
    • 向@BrandonAGr 发表了评论 - 无法弄清楚如何将 LongRunning 与 Parallel.ForEach 一起使用。有什么建议吗?
    • @SFun28:嗯 - 看起来你不能在那里指定任务创建选项。要么自己创建任务,要么考虑编写自己的任务调度程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多