c# - 优先考虑线程。

标签 c# multithreading threadpool

所以我的应用程序有一个积分集合。每个点都有一个 CheckStatusTimer、CheckNewDataTimer 和 CheckDevceTimer(它们是 System.Timer)。 Point 有一个sampleTime 属性。如果采样时间设置为 30 秒,则:

CheckStatusTimer.Interval = sampleTime/4;   // ~7 seconds, it will reset and start over
CheckNewDataTimer.Interval = sampleTime/2;  // 15 seconds, it will reset and start over
CheckDevceTimer.Interval = sampleTime;      // 30 seconds, it will reset and start over

所有这些计时器都会触发一个函数,该函数将从连接的 (Modbus tcp) 设备中提取数据,这需要一些时间。正如您可以想象的那样,我添加的点越多,将调度更多的线程,并且用户调用的处理时间也会增加。

我创建一个任务来处理用户传入的消息。

Task.Factory.StartNew(() => this.ProccessMessage(session, value));

我尝试过设置(我知道这是个坏主意)

Thread.CurrentThread.Priority = ThreadPriority.Highest; 

但这没有用,并且也尝试过

    var worker = new Thread(() = this.ProccessMessage(session, value))
                     {
                         Priority = ThreadPriority.Highest
                     };
    worker.Start();

效果不太好,进程时间没有差异。 所以我的问题是如何优先考虑线程或 this.ProccessMessage(session, value) 方法,而不是计时器线程/方法。因此,当用户调用电话时,无论我的收藏有多大,它都会立即响应,不会有任何延迟。

最佳答案

看来您需要在这里排队。 1个高优先级队列和1个低优先级队列。所有计时器线程都应发布到低优先级队列。用户消息应该进入高优先级队列。为了处理这些队列,您可以有一个线程池来读取队列并处理数据,首先处理高优先级队列。此方法可能适用于您的问题。

关于c# - 优先考虑线程。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167065/

相关文章:

c# - 在 SQLite 中为 WinRT 实现自定义排序规则

c# - BufferedImage.getRGB C# 等效?

c++ - 在 64 位 Linux 上 boost 线程内存使用率

C#在单独的线程中连接到数据库

ios - 当主线程被阻塞时,MBProgressHUD 没有及时显示

java - Spring Boot ThreadPoolTask​​Executor内存泄漏

c# - 如何使委托(delegate)线程成为STA

c# - 如何为.NET Core 3.0 Worker Service设置事件日志

c# - 未选择字段的SQL语句

java - 使用线程同时运行两个独立的任务