Пример #1
0
        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;
                }

            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        public Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity)
        {
            WasCalled = true;
            Attempts = attempts;
            Activity = activity;

            return Task.FromResult(Result);
        }
Пример #4
0
        public Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity)
        {
            WasCalled = true;
            Attempts  = attempts;
            Activity  = activity;

            return(Task.FromResult(Result));
        }
Пример #5
0
        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));
        }
Пример #6
0
 private async Task stop(IMonitoredActivity activity)
 {
     try
     {
         await activity.Stop().ConfigureAwait(false);
     }
     catch (Exception e)
     {
         _logger.Error(e);
     }
 }
Пример #7
0
        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);
        }
Пример #8
0
 private async Task stop(IMonitoredActivity activity)
 {
     try
     {
         await activity.Stop().ConfigureAwait(false);
     }
     catch (Exception e)
     {
         _logger.Error(e);
     }
 }
Пример #9
0
        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);
            }
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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;
                }
            }
        }
Пример #12
0
 public Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity)
 {
     return Task.FromResult(ExceptionAction.Pause);
 }
Пример #13
0
 public Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity)
 {
     return(Task.FromResult(ExceptionAction.Pause));
 }
Пример #14
0
 public Task TryAction(Func<Task> action, IMonitoredActivity activity, int attempts = 0)
 {
     return action();
 }
Пример #15
0
        public Task<ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity)
        {
            _logger(ex);

            return Task.FromResult(ExceptionAction.StopAll);
        }
Пример #16
0
 public IExceptionAction DetermineAction(Exception ex, IMonitoredActivity activity)
 {
     return(_handlers.FirstOrDefault(x => x.Match(ex))?.Action ?? DefaultAction);
 }
Пример #17
0
 public Task TryAction(Func <Task> action, IMonitoredActivity activity, int attempts = 0)
 {
     return(action());
 }
Пример #18
0
 public Task <ExceptionAction> Handle(Exception ex, int attempts, IMonitoredActivity activity)
 {
     _logger(ex);
     return(Task.FromResult(ExceptionAction.Stop));
 }