Я придумал какой-то код, чтобы потреблять все вещи из очереди. Вместо обработки элементов 1 на 1 имеет смысл обрабатывать все элементы ожидания как набор.
Я объявил свою очередь следующим образом.
private BlockingCollection<Item> items =
new BlockingCollection<Item>(new ConcurrentQueue<Item>);
Затем, в потребительском потоке, я планирую читать элементы в партиях, например,
Item nextItem;
while (this.items.TryTake(out nextItem, -1))
{
var workToDo = new List<Item>();
workToDo.Add(nextItem);
while(this.items.TryTake(out nextItem))
{
workToDo.Add(nextItem);
}
// process workToDo, then go back to the queue.
}
В этом подходе отсутствует полезность GetConsumingEnumerable
, и я не могу не задаться вопросом, пропустил ли я лучший способ, или если мой подход ошибочен.
Есть ли лучший способ использовать BlockingCollection<T>
в партиях?