清除ThreadPool

时间:2009-09-21 15:45:49

标签: c# threadpool

我正在使用C#在Visual Studio 2008中开发我的第一个ThreadPool应用程序。

我的报告必须使用SQL Server上的数据执行2000到4000个部分的计算。

我正在对ThreadPool中的所有零件编号进行排队,在那里它们会关闭并计算它们的结果。完成这些线程后,RegisterWaitForSingleObject事件将触发取消注册排队项的句柄。

所有排队项目完成后,有没有办法从ThreadPool中删除它们?

它看起来如何,如果有人使用一组新的2000到4000个部件运行另一个报告,我无法删除以前的部件数组。

如何删除以前排队的项目?用workerThreads = 0调用SetMaxThreads会吗?

我意识到我可以尝试,但是那时我可以浪费大部分时间进行实验。

感谢您的时间,

2 个答案:

答案 0 :(得分:4)

一旦ThreadPool项完成,它将自动从队列中删除。什么告诉你他们不是?

答案 1 :(得分:2)

假设您打算中断(取消)当前队列的工作......

更改max-threads不会影响待处理的工作;它只会改变可用的线程数 - 而且通常不好意思搞乱这个(你的代码不是使用ThreadPool的唯一东西)。我会使用自定义队列 - 编写基本(线程安全)生产者/消费者队列相当容易,或者.NET 4.0包含一些非常好的自定义线程队列。

然后您可以中止自定义队列并开始一个新队列。

我写了一个简单的here;目前它想要在终止之前干净地退出(即排空队列直到它是空的),但是在当前项目之后立即添加一个标志就可以很容易地停止(不要诉诸于中断/中止线程)执行中的任意点;永远不是一个好主意。)