public async Task <Dictionary <string, string> > GetUserConnectionsAsync(string userId) { string cacheKey = CacheKeyFactories.GenerateConnectionCacheKey(userId, EntityKey); int countConnectionsInDb = await connectionProvider.CountConnectionsAsync(userId); var dataFromCache = await CacheGetString(cacheKey); if (countConnectionsInDb == 0 && dataFromCache == null || (dataFromCache == null || dataFromCache.Connections.Keys.Count == 0)) { return(null); } if (dataFromCache.Connections.Keys.Count > 0 && dataFromCache.Connections.Count == countConnectionsInDb) { return(dataFromCache.Connections); } var connectionsFromDb = await connectionProvider.GetModelsBySearchPredicate(x => x.UserId == userId); var connectionsIdentefier = new Dictionary <string, string>(); foreach (var connection in connectionsFromDb) { connectionsIdentefier.Add(connection.ConnectionId, connection.SessionId); } var cacheValue = new ConnectionCacheModel() { UserId = userId, Connections = connectionsIdentefier }; await CacheUpdateString(cacheKey, cacheValue, TimeSpan.FromMinutes(tokenOptions.Value.AccessTokenLifeTime)); return(cacheValue.Connections); }