public async Task <Either <BaseError, PlexConnectionParametersViewModel> > Handle( GetPlexConnectionParameters request, CancellationToken cancellationToken) { if (_memoryCache.TryGetValue(request, out PlexConnectionParametersViewModel parameters)) { return(parameters); } Either <BaseError, PlexConnectionParametersViewModel> maybeParameters = await Validate(request) .MapT( cp => new PlexConnectionParametersViewModel( new Uri(cp.ActiveConnection.Uri), cp.PlexServerAuthToken.AuthToken)) .Map(v => v.ToEither <PlexConnectionParametersViewModel>()); return(maybeParameters.Match( p => { _memoryCache.Set(request, p, TimeSpan.FromHours(1)); return maybeParameters; }, error => error)); }