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);
        }