public void Set(IReadOnlyList <Candle> candles) { _lock.EnterWriteLock(); try { foreach (var groupByAssetPairId in candles.GroupBy(candle => candle.AssetPairId)) { if (!_cache.TryGetValue(groupByAssetPairId.Key, out var candlesByAssetPairId)) { candlesByAssetPairId = new Dictionary <CandleType, CandlesBag>(); _cache.Add(groupByAssetPairId.Key, candlesByAssetPairId); } foreach (var groupByType in groupByAssetPairId.GroupBy(candle => candle.Type)) { if (!candlesByAssetPairId.TryGetValue(groupByType.Key, out var bag)) { bag = new CandlesBag(); candlesByAssetPairId.Add(groupByType.Key, bag); } bag.Add(groupByType.ToList()); } } } finally { _lock.ExitWriteLock(); } }
public async Task InitializeAsync() { if (_initialized) { return; } var candles = await _candlesRepository.GetAllAsync(); foreach (var groupByAssetPairId in candles.GroupBy(candle => candle.AssetPairId)) { var assetPairCandles = new Dictionary <CandleType, CandlesBag>(); foreach (var groupByType in groupByAssetPairId.GroupBy(candle => candle.Type)) { var bag = new CandlesBag(groupByType.ToList()); assetPairCandles.Add(groupByType.Key, bag); } _cache.Add(groupByAssetPairId.Key, assetPairCandles); } _initialized = true; }