public async Task GetCurrencyTodaysRatesAsync(string symbol, CancellationToken stoppingToken) { try { while (!stoppingToken.IsCancellationRequested) { var response = await _httpClient.GetAsync($"a/{symbol}/today/?format=json", stoppingToken); if (response.IsSuccessStatusCode == false) { _logger.LogCritical("NBP API Failed with HTTP Status Code {statusCode} at: {time}", response.StatusCode, DateTimeOffset.Now); continue; } using var sr = new StreamReader(await response.Content.ReadAsStreamAsync()); using var jsonTextReader = new JsonTextReader(sr); var exchangeRateResult = _serializer.Deserialize <Currency>(jsonTextReader); await _currencyManager.CreateAsync(exchangeRateResult); if (exchangeRateResult.Rates.Any()) { foreach (var rate in exchangeRateResult.Rates) { _logger.LogInformation($"{symbol} = Bid: {rate.Bid}, Ask: {rate.Ask}"); } } else { _logger.LogCritical($"Exchange rate not returned from API."); } } } catch (HttpRequestException ex) { _logger.LogCritical($"{nameof(HttpRequestException)}: {ex.Message}"); } }