public void Set(RemoteXControlMessage controlMessage) { if (!Running) { return; } if (latestControlMessage.ContainsKey(controlMessage.DataType)) { latestControlMessage[controlMessage.DataType] = controlMessage; } else { latestControlMessage.Add(controlMessage.DataType, controlMessage); } RCMWithEnqueueTime rcmWithEnqueueTime = new RCMWithEnqueueTime(DateTime.Now, controlMessage); lock (unfetchedControlMessageBufferLock) { unfetchedControlMessageBuffer.Enqueue(rcmWithEnqueueTime); DateTime nowDateTime = DateTime.Now; DateTime earliestBufferEnqueueTime = unfetchedControlMessageBuffer.Peek().EnqueueDateTime; while ((nowDateTime - earliestBufferEnqueueTime) > RemoveBufferTimeout && unfetchedControlMessageBuffer.Count > 0) { unfetchedControlMessageBuffer.Dequeue(); earliestBufferEnqueueTime = unfetchedControlMessageBuffer.Peek().EnqueueDateTime; } } }
private Task removeTimeoutBufferAsync() { return(Task.Run(() => { while (true) { lock (unfetchedControlMessageBufferLock) { if (unfetchedControlMessageBuffer.Count > 0) { RCMWithEnqueueTime rcmWithEnqueueTime = unfetchedControlMessageBuffer.Peek(); if ((DateTime.Now - rcmWithEnqueueTime.EnqueueDateTime) > RemoveBufferTimeout) { unfetchedControlMessageBuffer.Dequeue(); } } } } })); }