我是多线程的新手。在Windows服务中,我使用SemaphoreSlim类来启动Thread Governer。 SemaphoreSlim构造函数接受两个参数 - 线程池大小和最大线程池大小。我把它设置如下 -
int poolSize = 2;
SemaphoreSlim threadGoverner = new SemaphoreSlim(poolSize, poolSize);
因此,在启动WindowsService时初始化threadGoverner,即OnStart事件。现在这两个线程被用来处理某种工作。我有一个要求,我需要动态更改池大小。因此,如果池大小更改为3,则服务应该开始处理3个请求。
所以,我想要做的是使用批处理命令文件重启服务。但我遇到的问题是,如果有超过1个线程在运行,另一个继续处理这些作业。这导致我的服务行为异常。
我想要的是,如果我检测到池大小的更改,则没有线程应该开始处理作业,这样我就可以重新启动服务而不会出现任何异常。
任何人都可以帮我吗?