我有多个线程(在 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。
查看等待句柄 http://msdn.microsoft.com/en-us/library/system.threading.waithandle.aspx及其下降的阶级。事件等待句柄 http://msdn.microsoft.com/en-us/library/system.threading.eventwaithandle.aspx可能适合您的需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)