所以我的應用程序有一個點的集合。每個點都有一個CheckStatusTimer,CheckNewDataTimer和CheckDevceTimer(它們是System.Timers)。 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(會話,價值)方法,在定時器線程/方法。所以當用戶撥打電話時,無論我的收藏大小如何,它都會馬上響應。
不要優先考慮線程,優先考慮工作。 –
這是不是很清楚你問什麼。假設你有100個點,每個點的採樣時間爲30秒,那麼你將有200個計時器,每30秒觸發100個(4 + 2 + 1)= 700個事件。你試圖優先考慮哪些事件?請記住,優先級意味着通過減慢另一項任務來加快完成一項任務。 – Enigmativity