您不能直接更改其中的项目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);
您似乎想这样做以按顺序按几个模块处理每个项目。但我不确定这是做这种工作的正确方法。更好的方法可能是在每两个模块之间设置一个队列。一个模块总是从它的输入队列中取出一个项目,处理它,然后把它放到它的输出队列中。
这种方法的优点之一是更大的灵活性:一个模块可以在输出和输入上具有不同的类型,这对于“一个队列”方法是不可能的(除非你使用object
s 的队列,或者类似的东西那)。
TPL Dataflow(.Net 4.5 中的新功能)使用这种方法通过并行化提高性能。它可以做到这一点,因为如果您没有单个中央队列,每个模块都可以独立于其他模块处理项目。