예제 #1
0
        public async ValueTask <IList <Starship> > ExecuteAsync()
        {
            if (!_cache.TryGetValue <List <Starship> >(_startshipsCacheKey, out var starships))
            {
                var apiResponse = await ServiceExecutor.ExecuteAsync <ApiResponse>(
                    _logger, () => _starShipsServiceClient.GetStarshipsAsync(1));

                starships = apiResponse?.Data?.Starships as List <Starship>;

                var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(DateTimeOffset.Now.AddDays(1));
                _cache.Set(_startshipsCacheKey, starships, cacheEntryOptions);
            }
            return(starships);
        }
예제 #2
0
        public async ValueTask <IList <Starship> > ExecuteAsync()
        {
            if (!_cache.TryGetValue <List <Starship> >(_startshipsCacheKey, out var starships))
            {
                starships = new List <Starship>();
                ServiceResponse <ApiResponse> apiResponse;
                var pageNumber = 1;
                do
                {
                    apiResponse = await ServiceExecutor.ExecuteAsync <ApiResponse>(
                        _logger, () => _starShipsServiceClient.GetStarshipsAsync(pageNumber));

                    var collection = apiResponse?.Data?.Starships;
                    starships.AddRange(collection.Select(starship => starship));
                    pageNumber++;
                } while (!string.IsNullOrWhiteSpace(apiResponse?.Data.NextPageUrl));

                var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(DateTimeOffset.Now.AddDays(1));
                _cache.Set(_startshipsCacheKey, starships, cacheEntryOptions);
            }
            return(starships);
        }
예제 #3
0
 private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
 {
     await ServiceExecutor.ExecuteAsync(sender, message);
 }