private async Task StartLoop(CancellationToken cancellation, string cryptoCode) { Logs.PayServer.LogInformation($"Starting listening Zcash-like daemons ({cryptoCode})"); try { while (!cancellation.IsCancellationRequested) { try { await _ZcashRpcProvider.UpdateSummary(cryptoCode); if (_ZcashRpcProvider.IsAvailable(cryptoCode)) { await Task.Delay(TimeSpan.FromMinutes(1), cancellation); } else { await Task.Delay(TimeSpan.FromSeconds(10), cancellation); } } catch (Exception ex) when(!cancellation.IsCancellationRequested) { Logs.PayServer.LogError(ex, $"Unhandled exception in Summary updater ({cryptoCode})"); await Task.Delay(TimeSpan.FromSeconds(10), cancellation); } } } catch when(cancellation.IsCancellationRequested) { } }
public Task StartAsync(CancellationToken cancellationToken) { if (!_ZcashLikeConfiguration.ZcashLikeConfigurationItems.Any()) { return(Task.CompletedTask); } _Cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); leases.Add(_eventAggregator.Subscribe <ZcashEvent>(OnZcashEvent)); leases.Add(_eventAggregator.Subscribe <ZcashRPCProvider.ZcashDaemonStateChange>(e => { if (_ZcashRpcProvider.IsAvailable(e.CryptoCode)) { _logger.LogInformation($"{e.CryptoCode} just became available"); _ = UpdateAnyPendingZcashLikePayment(e.CryptoCode); } else { _logger.LogInformation($"{e.CryptoCode} just became unavailable"); } })); _ = WorkThroughQueue(_Cts.Token); return(Task.CompletedTask); }