private async Task RunConsumerTaskAsync() { try { while (!_cancellationToken.IsCancellationRequested) { var nextItem = _collection.Take(_cancellationToken); Log.Logger.Debug($"Consuming item {nextItem.FilePath}"); if (!IsPopulated(nextItem)) { await PopulateThumbnailAndMetaDataAsync(nextItem); if (!IsPopulated(nextItem)) { // put it back in the queue! ReplaceInQueue(nextItem); } else { ItemCompleted(nextItem); } Log.Logger.Verbose("Metadata queue size (consumer) = {QueueSize}", _collection.Count); if (_collection.Count == 0) { AllItemsCompletedEvent?.Invoke(this, EventArgs.Empty); } } else { ItemCompleted(nextItem); } } } catch (OperationCanceledException) { Log.Logger.Debug("Metadata consumer closed"); } catch (Exception ex) { Log.Logger.Error(ex, "Running MetaDataQueueConsumer"); } }
private void RunConsumerTask() { try { while (!_cancellationToken.IsCancellationRequested) { var nextItem = _collection.Take(_cancellationToken); Log.Logger.Debug($"Consuming item {nextItem.FilePath}"); if (!IsPopulated(nextItem)) { PopulateThumbnailAndMetaData(nextItem); if (!IsPopulated(nextItem)) { // put it back in the queue! ReplaceInQueue(nextItem); } else { Log.Logger.Debug($"Done item {nextItem.FilePath}"); ItemCompletedEvent?.Invoke(this, new ItemMetaDataPopulatedEventArgs { MediaItem = nextItem }); } Log.Logger.Verbose("Metadata queue size (consumer) = {QueueSize}", _collection.Count); if (_collection.Count == 0) { AllItemsCompletedEvent?.Invoke(this, EventArgs.Empty); } } } } catch (OperationCanceledException) { Log.Logger.Debug("Metadata consumer closed"); } }