public void UpdateSignal(T signal) { lock (SignalsToUpdateLock) { var indexSignal = SignalsToUpdate.FindIndex(m => m.ID == signal.ID); if (indexSignal >= 0) { SignalsToUpdate[indexSignal] = signal; } else { SignalsToUpdate.Add(signal); } } }
/// <summary> /// The Update Task which sends the Signals to update periodically to the Broker /// </summary> /// <param name="updateTime"></param> private void UpdateMqttTask(TimeSpan updateTime) { while (!_updateMqttCancellationTokenSource.Token.IsCancellationRequested) { _updateMqttCancellationTokenSource.Token.WaitHandle.WaitOne(updateTime); if (SignalsToUpdate.Count == 0) { continue; } lock (SignalsToUpdateLock) { foreach (var signalToSend in SignalsToUpdate) { SendCaValue(signalToSend); } SignalsToUpdate.Clear(); } } }