c# - 当有工作要做时挂起并通知线程

标签 c# multithreading

我有多个线程(在 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/

相关文章:

c++ - 'fair' 是如何在调用notify_one()时从wait()唤醒线程的标准C++atomic_flag

python - 动态重定向函数的标准输出

java - 如果线程花费太长时间,如何结束执行程序服务中的线程?

c# - 替换 C# 字符串中的数字

c# - 枚举是否需要 string.ToCharArray()?

c# - 在任何人订阅之前引发事件

c# - WPF:静态资源与资源字典?

C++:如果发生段错误或类似的事情,有没有办法杀死单个线程但保持应用程序运行?

java - 是什么让 JavaFx 2 任务成功/失败

c# - IdentityServer4 PostLogoutRedirectUri 空