public async Task <CacheEntry> Get(ICacheContext context) { var key = await GetKey(context); var cacheEntry = await _cache.Get <CacheEntry>(key); if (cacheEntry == null) { return(CacheEntry.Empty); } var validation = context.ResponseValidator(context, cacheEntry.Metadata); if (validation == ResponseValidationResult.Stale && !context.AllowStaleResultValidator(context, cacheEntry.Metadata)) { return(CacheEntry.Empty); } if (validation != ResponseValidationResult.OK && validation != ResponseValidationResult.Stale && validation != ResponseValidationResult.MustRevalidate) { return(CacheEntry.Empty); } object result; if (cacheEntry.IsHttpResponseMessage) { var responseBuffer = cacheEntry.Value as byte[]; result = await _serializer.Deserialize(responseBuffer, context.Token); } else { result = cacheEntry.Value; } return(new CacheEntry(result, cacheEntry.Metadata)); }