【问题标题】:Task Scheduler (Task.Factory) and controlling the number of threads任务调度器(Task.Factory)和控制线程数
【发布时间】:2013-03-27 01:38:15
【问题描述】:

我一直在阅读有关多线程的文章,以获得比常规的“将函数推送到线程池并等待它完成”方法更多的东西,这是非常基本的方法。

基本上,我想要更多地控制线程,传递取消令牌,获取返回值等的能力。这一切看起来都可以使用 Task.factory(任务计划程序),据我了解运行线程池的顶部。

如果是这样的话,如果我限制通用线程池上的线程数,那将适用于我的任务调度器的实现还是?

我还读到使用您自己的线程池比使用线程池更好,我可以将这两者混合起来获得我想要的控制吗?

欢迎提出任何建议!感谢您花时间解释更多人。

【问题讨论】:

    标签: c# multithreading task-parallel-library


    【解决方案1】:

    您可以创建一个TaskScheduler that limits concurrency。然后可以使用此自定义调度程序创建您自己的TaskFactory,并启动使用您希望的控件自定义的任务。

    Parallel Extensions Samples 项目包含许多可用作参考的自定义任务计划程序。

    我还读到使用你自己的线程池比使用线程池更好,我可以将这两者混合起来获得我想要的控制吗?

    对于大多数一般用途,我实际上不同意这一点。 .NET ThreadPool 非常高效且高度优化。它包括很多指标,用于自动扩展使用的线程数等。

    话虽如此,如果您愿意,您始终可以创建一个使用专用线程或您自己的“线程池”实现的TaskScheduler

    【讨论】:

    • 我想要的是 - 我有一个函数:int Calc(int 1, int 2) - 我想做 100 次,最多 10 个线程,并将结果保存在屏幕上,并且有一个取消按钮,以防我想取消整个事情 - 没有更简单的方法吗?
    • @Darko 使用 Parallel.ForParallelOptions 设置。见reedcopsey.com/series/parallelism-in-net4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多