private async Task ProcessCandlesUpdatedEventAsync(CandlesUpdatedEvent candlesUpdate)
        {
            try
            {
                if (_cacheInitalizationService.InitializationState != CacheInitializationState.Idle)
                {
                    await Task.Delay(5000);

                    throw new InvalidOperationException("Initialization in progress");
                }

                var validationErrors = ValidateQuote(candlesUpdate);

                if (validationErrors.Any())
                {
                    var message = string.Join("\r\n", validationErrors);
                    _log.Warning(nameof(ProcessCandlesUpdatedEventAsync), message, context: candlesUpdate.ToJson());

                    return;
                }

                var candles = candlesUpdate.Candles
                              .Where(candleUpdate =>
                                     _candlesChecker.CanHandleAssetPair(candleUpdate.AssetPairId))
                              .Select(candleUpdate => Candle.Create(
                                          priceType: candleUpdate.PriceType,
                                          assetPair: candleUpdate.AssetPairId,
                                          timeInterval: candleUpdate.TimeInterval,
                                          timestamp: candleUpdate.CandleTimestamp,
                                          open: candleUpdate.Open,
                                          close: candleUpdate.Close,
                                          low: candleUpdate.Low,
                                          high: candleUpdate.High,
                                          tradingVolume: candleUpdate.TradingVolume,
                                          tradingOppositeVolume: candleUpdate.TradingOppositeVolume,
                                          lastTradePrice: candleUpdate.LastTradePrice,
                                          lastUpdateTimestamp: candleUpdate.ChangeTimestamp))
                              .ToArray();

                await _candlesManager.ProcessCandlesAsync(candles);
            }
            catch (Exception)
            {
                _log.Warning(nameof(ProcessCandlesUpdatedEventAsync), "Failed to process candle", context: candlesUpdate.ToJson());
                throw;
            }
        }
        private async Task ProcessCandlesUpdatedEventAsync(CandlesUpdatedEvent candlesUpdate)
        {
            try
            {
                var validationErrors = ValidateQuote(candlesUpdate);
                if (validationErrors.Any())
                {
                    var message = string.Join("\r\n", validationErrors);
                    await _log.WriteWarningAsync(nameof(CandlesSubscriber), nameof(CandlesUpdatedEvent), candlesUpdate.ToJson(), message);

                    return;
                }

                var candles = candlesUpdate.Candles
                              .Where(candleUpdate =>
                                     Constants.StoredIntervals.Contains(candleUpdate.TimeInterval) &&
                                     _candlesChecker.CanHandleAssetPair(candleUpdate.AssetPairId))
                              .Select(candleUpdate => Candle.Create(
                                          priceType: candleUpdate.PriceType,
                                          assetPair: candleUpdate.AssetPairId,
                                          timeInterval: candleUpdate.TimeInterval,
                                          timestamp: candleUpdate.CandleTimestamp,
                                          open: candleUpdate.Open,
                                          close: candleUpdate.Close,
                                          low: candleUpdate.Low,
                                          high: candleUpdate.High,
                                          tradingVolume: candleUpdate.TradingVolume,
                                          tradingOppositeVolume: candleUpdate.TradingOppositeVolume,
                                          lastTradePrice: candleUpdate.LastTradePrice,
                                          lastUpdateTimestamp: candleUpdate.ChangeTimestamp))
                              .ToArray();

                await _candlesManager.ProcessCandlesAsync(candles);
            }
            catch (Exception)
            {
                await _log.WriteWarningAsync(nameof(CandlesSubscriber), nameof(ProcessCandlesUpdatedEventAsync), candlesUpdate.ToJson(), "Failed to process candle");

                throw;
            }
        }