public override async Task <IResult <TResponse> > Handle(TRequest request, CancellationToken cancellationToken) { var code = GenerateKey(request); TResponse existing; if (request.CacheControl != CacheControl.NoCache) { existing = _cacheService.Get <TResponse>(code); if (existing != null) { request.CompletedFromCache = true; OnGotFromCache(existing, code); return(Result.Success(existing)); } } if (request.CacheControl == CacheControl.OnlyIfCached) { return(Result.Failure <TResponse>(ErrorCodes.NotFound)); } var result = await HandleImpl(request, cancellationToken) .ConfigureAwait(false); if (result.IsFailure) { return(result); } var regions = Enum.GetValues <CacheRegion>() .Where(r => request.CacheRegion.HasFlag(r)) .Select(r => r.ToString()) .ToArray(); _cacheService.Add(result.Value, code, regions); OnAddedToCache(result.Value, code, request.CacheRegion.ToString()); return(result); }