private void OnProcessTask() { while (!_pumpCancellationTokenSource.IsCancellationRequested) { _newMessageEvent.WaitOne(); Task.Delay(DelayOnProcess).Wait(); try { if (_msgBuffer.IsEmpty) { continue; } // TODO: use bulk insert and pk id generate in service !!! while (_msgBuffer.TryDequeue(out Event msg)) { var srcName = msg.Source; var instName = msg.Instance; if (srcName.Trim().Length != 0 && instName.Trim().Length != 0) { var instance = _cache.CheckSourceAndInstance(srcName, instName); _processor.Process(msg, instance); } // TODO: increase count of ignored messages } _processor.FinalizeProcessing(); } catch (Exception ex) { _monik.LogicError($"Failed to process messages: {ex}"); } finally { _newMessageEvent.Reset(); } } }