如何挂起多个线程,以便它们不会开始处理任何作业,我可以重新启动我的Windows服务?

时间:2013-11-06 04:59:31

标签: multithreading windows-services

我是多线程的新手。在Windows服务中,我使用SemaphoreSlim类来启动Thread Governer。 SemaphoreSlim构造函数接受两个参数 - 线程池大小和最大线程池大小。我把它设置如下 -

int poolSize = 2;
SemaphoreSlim threadGoverner = new SemaphoreSlim(poolSize, poolSize);

因此,在启动WindowsService时初始化threadGoverner,即OnStart事件。现在这两个线程被用来处理某种工作。我有一个要求,我需要动态更改池大小。因此,如果池大小更改为3,则服务应该开始处理3个请求。

所以,我想要做的是使用批处理命令文件重启服务。但我遇到的问题是,如果有超过1个线程在运行,另一个继续处理这些作业。这导致我的服务行为异常。

我想要的是,如果我检测到池大小的更改,则没有线程应该开始处理作业,这样我就可以重新启动服务而不会出现任何异常。

任何人都可以帮我吗?

0 个答案:

没有答案