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