// 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); } }
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(); } }