寻找一个.NET 4线程池

3
我正在寻找一个好的线程池实现。我知道.NET ThreadPool在.NET 4中已经被重写/改进,但我怀疑它是否符合我的需求。
我有许多需要并行执行的任务。我想能够控制同时工作在这些任务上的最大线程数,并且如果可能的话能够为这些任务设置优先级。空闲的线程应该被释放,必要时应创建新的线程,不超过指定的最小/最大线程数。
据我所知,我无法控制.NET ThreadPool用于处理"我的"任务的线程数(不希望影响应用程序的其他部分,即委托),也无法将一定数量的线程分配给仅处理我的任务。
因此,我的问题是:
  • 是否有办法在我的情况下使用.NET ThreadPool?
  • 如果没有,哪些好的(最好是免费的)ThreadPool实现可以使用?(.NET Framework 4和Windows Azure兼容)
编辑: 添加了线程数量不断变化的要求。

2
你的其他问题都有答案,你应该尽快接受一些答案,否则人们就不太可能回答这个问题。 - Kieren Johnstone
你说得对,我重新查看了一些旧问题并接受了那里的答案(尽管它们不完全是我要找的,但如果这就是系统的工作方式,那就这样吧)。 - enzi
4个回答

2

我认为您正在寻找 System.Threading.Tasks.Task 类。简单来说,它类似于使用线程池,但是它会返回 Tasks,其 API 与 Threads 类似。不过注意,您不能对 Tasks 进行优先级排序,但是您确实想要并行运行任务。


1
你可以编写一个自定义的TaskScheduler,这可以给你优先级。例如,请参见http://social.msdn.microsoft.com/Forums/is/parallelextensions/thread/93100c88-c19f-42d7-9975-cd5415989a1a。 - Joe White
TaskScheduler符合我所寻找的方向,谢谢Joe。也许已经有了一个实现我所需求的调度器,我会去研究一下。 - enzi

2

看起来不错,但似乎已经不再积极开发了? - enzi

1

ThreadPool 的实现之美在于其通过增加/减少线程池的大小来响应池的负载能力。

如果您没有这样的要求(固定数量的线程适用于您),那么您可能不需要一个复杂的线程池。因此,您可能只需要一个简单的类来抽象创建和管理线程。


我所说的“控制线程数量”,实际上是指最大数量 - 空闲线程应该在必要时被处理并重新创建,我会更新我的问题。 - enzi

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接