アイテムを直接変更することはできませんQueue
(ただし、Tudor が提案した回避策を使用できます)。ただし、キューが必要な場合は、を使用する必要はありませんQueue
。.Net の別の可能なタイプは ですLinkedList
。これにより、シナリオで使用できる両端からのものを追加および削除できます。
LinkedList<int> list = new LinkedList<int>();
// enqueue an item
list.AddLast(1);
// dequeue an item
var item = list.First.Value;
list.RemoveFirst();
// put item back to the front of the queue
list.AddFirst(item);
各アイテムを複数のモジュールで順番に処理するには、これを行いたいようです。しかし、これがこの種の作業を行う正しい方法であるかどうかはわかりません。より良い方法は、2 つのモジュールごとにキューを作成することです。モジュールは常に入力キューからアイテムを取得し、それを処理してから出力キューに入れます。
このアプローチの利点の 1 つは、柔軟性が高いことです。モジュールは、入力とは異なる型を出力に持つことができます。これは、「キューが 1 つ」のアプローチでは不可能です ( object
s のキューなどに頼らない限り)。それ)。
TPL データフロー (.Net 4.5 の新機能) は、このアプローチを使用して、並列化によってパフォーマンスを向上させます。単一の中央キューがない場合、各モジュールは他のモジュールとは独立してアイテムを処理できるため、それが可能です。