예제 #1
0
        private async Task TryExecuteIterationsAsync()
        {
            var iterationProcessor = _configuration.IterationProcessorProvider();

            while (CanExecuteIteration(_iterationOrdinal))
            {
                try
                {
                    await ExecuteIterationAsync(iterationProcessor);

                    var canExecuteNextIteration = CanExecuteIteration(_iterationOrdinal + 1);
                    if (!canExecuteNextIteration)
                    {
                        break;
                    }

                    _iterationOrdinal++;
                }
                catch (Exception exception)
                {
                    try
                    {
                        _configuration.Hooks.OnError.Execute(exception);
                        await _configuration.Hooks.OnErrorAsync.ExecuteAsync(exception);
                    }
                    catch (Exception onErrorException)
                    {
                        //Think what to do about it
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Start the Warden.
        /// It will be running iterations in a loop (infinite by default but can bo changed) and executing all of the configured hooks.
        /// </summary>
        /// <returns></returns>
        public async Task StartAsync()
        {
            _running = true;
            _configuration.Hooks.OnStart.Execute();
            await _configuration.Hooks.OnStartAsync.ExecuteAsync();

            var iterationProcessor = _configuration.IterationProcessorProvider();

            while (CanExecuteIteration(_iterationOrdinal))
            {
                try
                {
                    _configuration.Hooks.OnIterationStart.Execute(_iterationOrdinal);
                    await _configuration.Hooks.OnIterationStartAsync.ExecuteAsync(_iterationOrdinal);

                    var iteration = await iterationProcessor.ExecuteAsync(Name, _iterationOrdinal);

                    _configuration.Hooks.OnIterationCompleted.Execute(iteration);
                    await _configuration.Hooks.OnIterationCompletedAsync.ExecuteAsync(iteration);

                    var canExecuteNextIteration = CanExecuteIteration(_iterationOrdinal + 1);
                    if (!canExecuteNextIteration)
                    {
                        break;
                    }

                    _iterationOrdinal++;
                }
                catch (Exception exception)
                {
                    try
                    {
                        _configuration.Hooks.OnError.Execute(exception);
                        await _configuration.Hooks.OnErrorAsync.ExecuteAsync(exception);
                    }
                    catch (Exception onErrorException)
                    {
                        //Think what to do about it
                    }
                }
                finally
                {
                    await Task.Delay(_configuration.IterationDelay);
                }
            }
        }
예제 #3
0
파일: Warden.cs 프로젝트: weiplanet/Warden
        private async Task TryExecuteIterationsAsync()
        {
            var iterationProcessor = _configuration.IterationProcessorProvider();

            _currentIterationCancellationTokenSource = new CancellationTokenSource();
            while (CanExecuteIteration(_iterationOrdinal))
            {
                try
                {
                    _currentIterationTask = Task.Run(() => ExecuteIterationAsync(iterationProcessor),
                                                     _currentIterationCancellationTokenSource.Token);
                    await _currentIterationTask;
                    var   canExecuteNextIteration = CanExecuteIteration(_iterationOrdinal + 1);
                    if (!canExecuteNextIteration)
                    {
                        break;
                    }

                    _iterationOrdinal++;
                }
                catch (Exception exception)
                {
                    try
                    {
                        _logger.Error("There was an error while executing Warden iteration " +
                                      $"{_iterationOrdinal}.", exception);
                        _logger.Trace("Executing Warden hooks OnError.");
                        _configuration.Hooks.OnError.Execute(exception);
                        _logger.Trace("Executing Warden hooks OnErrorAsync.");
                        await _configuration.Hooks.OnErrorAsync.ExecuteAsync(exception);
                    }
                    catch (Exception onErrorException)
                    {
                        _logger.Error("There was an error while executing internal Warden error hooks " +
                                      $"for iteration {_iterationOrdinal}.", onErrorException);
                    }
                }
            }
        }