Ejemplo n.º 1
0
        // called in background thread
        private async void Run(object state)
        {
            try
            {
                //MappedDiagnosticsContext.Set("Worker", Name);
                BeginWork();

                _logger.Trace()
                .Message("Running '{0}' worker.", Name)
                .Write();

                var runner = CreateRunner();
                if (runner == null)
                {
                    _logger.Error()
                    .Message("Error creating runner for '{0}'.", Name)
                    .Write();

                    // don't start again
                    _isAwaitingShutdown = true;
                    return;
                }

                var context = new RunnerContext(Configuration, this, _cancellation.Token);

                var watch = Stopwatch.StartNew();
                await runner.RunAsync(context).ConfigureAwait(false);

                watch.Stop();

                _logger.Trace()
                .Message("Completed '{0}' process in: {1} ms.", Name, watch.ElapsedMilliseconds)
                .Write();
            }
            catch (Exception ex)
            {
                _logger.Error()
                .Message("Error running '{0}' process. {1}", Name, ex.Message)
                .Exception(ex)
                .Write();
            }
            finally
            {
                // dispose runner if possible
                FreeRunner();

                EndWork();
                //MappedDiagnosticsContext.Remove("Worker");

                StartTimer(Configuration.PollTime);
            }
        }
Ejemplo n.º 2
0
        private void StartTask()
        {
            // don't start if shutting down
            if (_isAwaitingShutdown || IsBusy)
            {
                return;
            }

            _logger.Info()
            .Message("Consumer Task: {0} is starting.", Name)
            .Write();

            try
            {
                _cancellation = new CancellationTokenSource(Configuration.TimeToLive);

                var runner = CreateRunner();
                if (runner == null)
                {
                    _logger.Error()
                    .Message("Error creating runner for '{0}'.", Name)
                    .Write();

                    // don't start again
                    _isAwaitingShutdown = true;
                    return;
                }

                var context = new RunnerContext(Configuration, this, _cancellation.Token);

                var watch = Stopwatch.StartNew();
                _task = runner.RunAsync(context);
                _task.ContinueWith(EndTask);
                watch.Stop();

                _logger.Trace()
                .Message("Worker '{0}' started task in: {1} ms.", Name, watch.ElapsedMilliseconds)
                .Write();
            }
            catch (Exception ex)
            {
                _logger.Error()
                .Message("Error running '{0}' process. {1}", Name, ex.Message)
                .Exception(ex)
                .Write();
            }
        }