public async Task StartAsync(CancellationToken cancellationToken) { var guid = _settings.NarodMonGuid.Replace("-", ""); var args = $"?lat=55.754500&lon=37.626132&radius=100&types=1&uuid={guid}&api_key={_settings.NarodApiKey}&lang=ru"; var fullRequest = Url.Combine(basicAddresss, nearBySensorsRequest, args); while (!cancellationToken.IsCancellationRequested) { Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() fullRequest: {fullRequest}"); using (var clt = _httpClientFactory.CreateClient(nameof(NarodMonPolling))) { try { var res = await clt.GetAsync(fullRequest, cancellationToken); if (res.IsSuccessStatusCode) { Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() status code: OK!"); var body = await res.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <SensorsNearbyResponse>(body); var values = response.Devices.SelectMany(d => d.Sensors, (d, s) => { if (s == null) { return(new DeviceValues()); } return(new DeviceValues { DateTimeTicks = d.Time, DeviceId = d.Id.ToString(), Id = Guid.NewGuid(), DateTimeUtc = DataChunk.GetDateTimeFromUnix(d.Time).ToUniversalTime(), Lat = d.Lat, Lon = d.Lon, Unit = s.Unit, Value = s.Value }); }); var existing = values.Where(x => !_getDevicesGrainPool.Any(z => x.DeviceId == z.DeviceId)); await _addStatisticsGrainPool.Put(values.ToArray()); } else { Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() status code: {res.StatusCode}!"); } } catch (Exception ex) { Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() ERROR: {ex.Message}!"); } } Thread.Sleep(70000); } }