我在写一个响应IMAP推送通知的Windows服务。收到通知时,我使用ThreadPool
排队用户工作项目。 (它调用的方法把一些东西放入数据库等等)。检查线程池是否有任何活动线程
在某些时候,我想停止我的服务,这将停止排队其他线程ThreadPool
,并等待,直到没有开放的线程正在工作。
//Pseudo code
public void StopService()
{
while (true)
{
if (ThreadPool.ActiveThreads == 0)
{
//disconnect imap
//stop service
}
}
}
更妙的是一种方式来告诉大家,我想通知它没有活动线程,这样我就不必轮询它在一个while循环的ThreadPool
。
This question使用线程安全计数器是一种方法来确定线程池是否有任何打开的线程,但肯定必须有一个标志或ThreadPool
类的某些方法/属性来确定此?
那不是你正在运行的代码可以在活动线程线程池? – krillgar
当然,为什么不呢?我写了Pseudo代码是为了一个理由,它是为了帮助我想象我写的东西。 –
嗯,我只是想,这将是你永远不会进入你的'if'声明并停止服务的原因。 – krillgar