2013-04-08 25 views
0

假设我有两个队列持有类似的消息类型以发送到端点。其中一个队列(队列A)具有最高优先级,因此必须始终首先发送它的消息。第二个队列(队列B)中的消息具有较低的优先级,只应在队列A为空时发送。我需要编写一些包含这两个队列的代码,并根据上述逻辑发送它们的内容。我假设我应该用一个新线程来做到这一点,这样当队列被清空并且我正在等待新消息到达时系统不会挂起。我想知道的是,这有一个很好的模式吗?我应该使用C#“队列”类型吗?有什么不该做的建议?提供单个端点的两个队列

+1

为什么不使用具有优先级的单个队列,这里有一些建议:http://stackoverflow.com/questions/4016509/concurrent-priority-queue-in-net-4-0 – 2013-04-08 11:34:01

+2

所有这些实现问题取决于非常依赖于您的技术堆栈。即Web,桌面,WCF? – 2013-04-08 11:36:26

回答

1

ConcurrentQueue<T> Class提供了一个线程安全的队列实现。您可以将两个实例粘合在一起以形成您的优先级队列并实施​​,以便它可以包装在BlockingCollection<T> Class中。然后任何线程都可以将项目添加到队列中,并且一个线程使用GetConsumingEnumerable Method消耗项目。

enum Priority 
{ 
    Low, 
    High, 
} 
struct Prioritized<T> 
{ 
    public Priority Priority; 
    public T Item; 
} 
class PriorityQueue<T> : IProducerConsumerCollection<Prioritized<T>> 
{ 
    private readonly ConcurrentQueue<T> low; 
    private readonly ConcurrentQueue<T> high; 

    ... 
} 
+0

当你看一个0和1的屏幕时,你看到矩阵吗? – Brandon 2013-04-08 11:37:36