public async Task <T> TryGetAsync <T>(Guid id) where T : class { var key = GetCacheKey <T>(id); object state; if (_cache.TryGetValue(key, out state)) { // _logger.Info(string.Format("HIT: mem:{0}/{1:n}", typeof(T).Name, id)); return(state as T); } // _logger.Info(string.Format("MISS: mem:{0}/{1:n}", typeof(T).Name, id)); bool remove = false; T foo = null; try { foo = await _durableCache.TryGetAsync <T>(id); } catch (Exception e) { remove = true; _logger.Warn(e.Message); } if (remove) { await _durableCache.RemoveAsync <T>(id); } return(foo != null?PutToMemory(id, foo) : null); }