public async Task TryAction(Func<Task> action, IMonitoredActivity activity, int attempts = 0) { try { await action().ConfigureAwait(false); } catch (Exception ex) { _logger.Error(ex); var handler = _handling.DetermineAction(ex, activity); var continuation = await handler.Handle(ex, attempts + 1, activity); switch (continuation) { case ExceptionAction.Retry: await TryAction(action, activity, attempts + 1); break; case ExceptionAction.Pause: await pause(activity).ConfigureAwait(false); break; case ExceptionAction.Stop: await stop(activity).ConfigureAwait(false); break; case ExceptionAction.StopAll: await stopAll().ConfigureAwait(false); break; } } }
private Task pause(IMonitoredActivity activity) { try { activity.Stop().ConfigureAwait(false); } catch (Exception e) { _logger.Error(e); } Task.Run(async() => { await Task.Delay(_handling.Cooldown); try { await activity.Start().ConfigureAwait(false); } catch (Exception e) { _logger.Error(e); } }); return(Task.CompletedTask); }
public Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { WasCalled = true; Attempts = attempts; Activity = activity; return Task.FromResult(Result); }
public Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { WasCalled = true; Attempts = attempts; Activity = activity; return(Task.FromResult(Result)); }
public async Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { if (attempts < Attempts) { await Task.Delay(Cooldown).ConfigureAwait(false); return(ExceptionAction.Retry); } return(await AfterMaxAttempts.Handle(ex, attempts, activity).ConfigureAwait(false)); }
private async Task stop(IMonitoredActivity activity) { try { await activity.Stop().ConfigureAwait(false); } catch (Exception e) { _logger.Error(e); } }
public async Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { if (attempts < Attempts) { await Task.Delay(Cooldown).ConfigureAwait(false); return ExceptionAction.Retry; } return await AfterMaxAttempts.Handle(ex, attempts, activity).ConfigureAwait(false); }
private async Task pause(IMonitoredActivity activity) { try { await activity.Stop().ConfigureAwait(false); } catch (Exception e) { _logger.Error(e); } await Task.Delay(_handling.Cooldown).ConfigureAwait(false); try { await activity.Start().ConfigureAwait(false); } catch (Exception e) { _logger.Error(e); } }
public async Task TryAction(Func <Task> action, IMonitoredActivity activity, int attempts = 0) { try { await action().ConfigureAwait(false); } catch (Exception ex) { _logger.Error(ex); var handler = _handling.DetermineAction(ex, activity); var continuation = await handler.Handle(ex, attempts + 1, activity); switch (continuation) { case ExceptionAction.Retry: await TryAction(action, activity, attempts + 1); break; case ExceptionAction.Pause: await pause(activity).ConfigureAwait(false); break; case ExceptionAction.Stop: await stop(activity).ConfigureAwait(false); break; case ExceptionAction.StopAll: await stopAll().ConfigureAwait(false); break; } } }
public Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { return Task.FromResult(ExceptionAction.Pause); }
public Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { return(Task.FromResult(ExceptionAction.Pause)); }
public Task TryAction(Func<Task> action, IMonitoredActivity activity, int attempts = 0) { return action(); }
public Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { _logger(ex); return Task.FromResult(ExceptionAction.StopAll); }
public IExceptionAction DetermineAction(Exception ex, IMonitoredActivity activity) { return(_handlers.FirstOrDefault(x => x.Match(ex))?.Action ?? DefaultAction); }
public Task TryAction(Func <Task> action, IMonitoredActivity activity, int attempts = 0) { return(action()); }
public Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity) { _logger(ex); return(Task.FromResult(ExceptionAction.Stop)); }