private async Task WorkerLoop(CancellationToken token) { Log.Trace().Message("WorkerLoop Start {0}", _queueName).Write(); while (!token.IsCancellationRequested && _workerAction != null) { Log.Trace().Message("WorkerLoop Pass {0}", _queueName).Write(); QueueEntry <T> queueEntry = null; try { queueEntry = Dequeue(); } catch (TimeoutException) { } if (token.IsCancellationRequested || queueEntry == null) { continue; } try { _workerAction(queueEntry); if (_workerAutoComplete) { queueEntry.Complete(); } } catch (Exception ex) { Log.Error().Exception(ex).Message("Worker error: {0}", ex.Message).Write(); queueEntry.Abandon(); Interlocked.Increment(ref _workerErrorCount); } } Log.Trace().Message("Worker exiting: {0} Cancel Requested: {1}", _queueName, token.IsCancellationRequested).Write(); }
private async Task WorkerLoop(CancellationToken token) { Log.Trace().Message("WorkerLoop Start {0}", typeof(T).Name).Write(); while (!token.IsCancellationRequested) { if (_queue.Count == 0 || _workerAction == null) { _autoEvent.WaitOne(TimeSpan.FromMilliseconds(250)); } Log.Trace().Message("WorkerLoop Signaled {0}", typeof(T).Name).Write(); QueueEntry <T> queueEntry = null; try { queueEntry = Dequeue(TimeSpan.Zero); } catch (TimeoutException) { } if (queueEntry == null || _workerAction == null) { return; } try { _workerAction(queueEntry); if (_workerAutoComplete) { queueEntry.Complete(); } } catch (Exception ex) { Log.Error().Exception(ex).Message("Worker error: {0}", ex.Message).Write(); queueEntry.Abandon(); Interlocked.Increment(ref _workerErrorCount); } } }