public async Task Start(bool startImmediately, CancellationToken ct = default(CancellationToken)) { while (true) { try { await Start0(startImmediately, ct).ConfigureAwait(_taskHelper); } catch (Exception e) when(e.Is <IOException>() || e.Is <HttpRequestException>()) { await _taskHelper.Delay(Duration.FromMinutes(20), ct).ConfigureAwait(_taskHelper); } startImmediately = false; } }
public async Task Start(bool startImmediately, CancellationToken ct = default(CancellationToken)) { bool wait = !startImmediately; while (true) { if (wait) { await _scheduler.ScheduleOne(Duration.FromMinutes(30), Duration.FromMinutes(20), ct).ConfigureAwait(_taskHelper); } wait = true; try { // Fetch for the next settlement period. This should be ready 10 minutes beforehand. Instant fetchTime = _time.GetCurrentInstant() + Duration.FromMinutes(30); var data = await _phyBmData.GetAsync(fetchTime.SettlementDate(), fetchTime.SettlementPeriod(), ct).ConfigureAwait(_taskHelper); await _writer.AppendAsync(data, ct).ConfigureAwait(_taskHelper); } catch (Exception e) when(e.Is <IOException>() || e.Is <HttpRequestException>()) { await _taskHelper.Delay(Duration.FromMinutes(15)).ConfigureAwait(_taskHelper); } } }
public async Task Start(CancellationToken ct = default(CancellationToken)) { while (true) { try { await Start0(ct).ConfigureAwait(_taskHelper); } catch (Exception e) when(e.Is <IOException>() || e.Is <HttpRequestException>()) { if (_errorLogFilename != null) { File.WriteAllText(_errorLogFilename, e.ToString()); } await _taskHelper.Delay(Duration.FromMinutes(45), ct).ConfigureAwait(_taskHelper); } catch (Exception e) { if (_errorLogFilename != null) { File.WriteAllText(_errorLogFilename, e.ToString()); } throw; } } }
public async Task Start(CancellationToken ct) { while (true) { try { await _scheduler.ScheduleOne(s_downloadInterval, s_downloadOffset, ct).ConfigureAwait(_taskHelper); var data = await _fuelInstHhCur.GetAsync(ct).ConfigureAwait(_taskHelper); await _datastoreWriter.AppendAsync(data, ct).ConfigureAwait(_taskHelper); } catch (Exception e) when(e.Is <IOException>() || e.Is <HttpRequestException>()) { await _taskHelper.Delay(Duration.FromSeconds(57)).ConfigureAwait(_taskHelper); } } }
private async Task ReadAsync() { var ct = _cts.Token; while (true) { // Start watch now, so no watch events are missed var delay = _pollInterval + _maxJitter * (_rnd.NextDouble() - 0.5); Task watchTask = _enableWatch ? _reader.AwaitChange(delay, ct) : _taskHelper.Delay(delay, ct); // Read as much as is available var en = (await _reader.ReadAsync((int)Count, ct: ct).ConfigureAwait(_taskHelper)).GetEnumerator(); while (await en.MoveNext(ct).ConfigureAwait(_taskHelper)) { Add(en.Current); } _tcs.TrySetResult(0); // Schedule/wait-for next read await watchTask.ConfigureAwait(_taskHelper); } }
public Task ScheduleOne(Duration interval, Duration offset, CancellationToken ct = default(CancellationToken)) => _taskHelper.Delay(NextDelay(interval, offset, _time.GetCurrentInstant()), ct);