【发布时间】:2014-04-08 17:54:02
【问题描述】:
我正在编写一个响应 IMAP 推送通知的 Windows 服务。收到通知后,我使用ThreadPool 将用户工作项排队。 (它调用的方法将一些东西放入数据库等)。
在某些时候,我想停止我的服务,这将阻止 ThreadPool 将其他线程排队并等待直到没有正在工作的打开线程。
//Pseudo code
public void StopService()
{
while (true)
{
if (ThreadPool.ActiveThreads == 0)
{
//disconnect imap
//stop service
}
}
}
更好的方法是告诉ThreadPool 我希望收到通知它没有活动线程,这样我就不必在while 循环中轮询它。
This question 使用线程安全计数器,这是确定 ThreadPool 是否有任何打开线程的一种方法,但肯定必须有一个标志或 ThreadPool 类之外的某些方法/属性来确定这一点?
【问题讨论】:
-
您正在运行的代码不会是线程池中的活动线程吗?
-
当然,为什么不呢?我写伪代码是有原因的,它是为了帮助可视化我写的内容。
-
嗯,我只是在想,这将是您永远不会进入
if声明并停止服务的原因。
标签: c# threadpool