任务计划程序(Task.Factory)并控制线程数

Dar*_*rko 4 c# multithreading task-parallel-library

我一直在阅读多线程,以获得更多的东西,而不是常规的"推送函数到线程池并等待它完成"的方法,这是非常基本的.

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

如果是这种情况,如果我限制一般线程池上的线程号,那将适用于我的任务调度程序的实现或?

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

欢迎任何建议!感谢您抽出宝贵的时间来解释一下.

Ree*_*sey 5

您可以创建一个限制并发TaskScheduler.然后,可以使用此自定义计划程序创建自己的计划程序TaskFactory,并启动使用您希望的控件自定义的任务.

并行扩展样本项目包括可以作为参考使用许多自定义任务调度.

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

对于大多数一般用途,我实际上不同意这一点..NET ThreadPool非常高效,并且经过高度优化.它包含了一些用于自动缩放所用线程数的指标等.

话虽这么说,如果你愿意,你总是可以TaskScheduler使用专用线程或你自己的"线程池"实现.

  • @Darko使用`ParallelOFor`设置`Parallel.For`.见http://reedcopsey.com/series/parallelism-in-net4/ (2认同)