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;
         }
     }
 }
Example #4
0
        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);
                }
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
 public Task ScheduleOne(Duration interval, Duration offset, CancellationToken ct = default(CancellationToken)) =>
 _taskHelper.Delay(NextDelay(interval, offset, _time.GetCurrentInstant()), ct);