2013-04-08 22 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