Может быть, комбинация.
В вашем первом предложении возникла проблема с тем, что, когда Очередь будет хорошо заполнена, вы начнете выполнять много задач, может быть, слишком много.
Второй будет использовать только 1 поток (я полагаю, это то, что вы имеете в виду здесь).
Вы, вероятно, должны начать N потребителей и разработать некоторую стратегию для N. Это очень сильно зависит от объема работы, использования ввода-вывода и т. Д.
Возможные стратегии:
- N = NumberOfCores (- 1)
- Запуск нового потребителя, когда Queue.Count> M
И вы также можете использовать Задачу (с параметром LongRunning) вместо потока.