我有多个线程(在 IIS 上运行的 C# 应用程序)正在运行,它们都需要与同一个 MQ 后端进行通信。为了最小化网络流量,我只需要在有工作要做时发送后端请求。将有一个线程监视是否有工作要做,它需要通知其他线程它们也应该开始处理。当前的解决方案涉及监控线程设置一个全局变量并让其他线程循环并检查,即在监控线程中:
CheckIfWorkAvailable() {
while(true) {
if (queue.Empty != true) {
workToBeDone = true;
}
}//end while loop
}
然后在工作线程中:
DoWork() {
while(true) {
if (workToBeDone == true) {
//do work...
}
else {
Thread.Sleep(x seconds)
}
}//end while loop
}
监控线程能否在有工作要做时通知工作线程,而不是让它们循环休眠?工作线程还设置了一个计数器,指示它们正在工作,并在工作完成后将其递减,以便可以将 workToBeDone 标志设置为 false。
最佳答案
查看 WaitHandle及其下层类(Class)。 EventWaitHandle可能适合您的需求。
关于c# - 当有工作要做时挂起并通知线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/210020/