我需要在新的应用程序中创建多个处理线程.每个线程都有可能“长时间运行”.有人可以评论内置的.net线程池或一些现有的自定义线程池的可行性,以便在我的应用程序中使用吗?
要求 :
在Windows服务中运行良好. (排队的工作可以从队列中删除,当前正在运行的线程可以告诉停止)
能够启动多个线程.
工作需要按顺序启动,但多个线程可以并行处理.
可以检测并杀死挂起的线程.
编辑:
评论似乎导致手动线程化.不幸的是,我坚持使用3.5版本的框架. Threadpool很吸引人,因为它可以让我排队工作,并在资源可用时为我创建线程.是否有一个很好的3.5兼容模式(生产者/消费者)可以给我这个线程池方面而不实际使用线程池?
解决方法:
您的要求基本上排除了.NET ThreadPool的使用;
由于存在耗尽水池的危险,它通常不应用于长时间运行的螺纹.
但它在Windows服务中运行良好,并且您可以启动多个线程 – 由池的限制自动限制.
您无法保证线程池的线程启动时间;当它有足够的空闲时,它可以将线程排队执行,甚至不保证它们将按照你提交的顺序启动.
在ThreadPool中没有简单的方法来检测和杀死正在运行的线程
基本上,你会想要看看ThreadPool之外;我可能会建议您可能需要’完整’的System.Threading.Thread实例,因为您的所有要求.只要你处理并发问题(正如你必须使用任何线程机制),我就不会发现Thread类本身就很难管理.