キューから待機中のすべてのアイテムを消費するコードをいくつか考え出しました。アイテムを 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>
をバッチで消費するより良い方法はありますか?