假設我有兩個隊列持有類似的消息類型以發送到端點。其中一個隊列(隊列A)具有最高優先級,因此必須始終首先發送它的消息。第二個隊列(隊列B)中的消息具有較低的優先級,只應在隊列A爲空時發送。我需要編寫一些包含這兩個隊列的代碼,並根據上述邏輯發送它們的內容。我假設我應該用一個新線程來做到這一點,這樣當隊列被清空並且我正在等待新消息到達時系統不會掛起。我想知道的是,這有一個很好的模式嗎?我應該使用C#「隊列」類型嗎?有什麼不該做的建議?提供單個端點的兩個隊列
0
A
回答
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
1
使用您的隊列BlockingCollection<T>
,並用ConcurrentPriorityQueue<T>
支持它,您將創建ConcurrentPriorityQueue
,並把它傳遞給the BlockingCollection
constructor that accepts an IProducerConsumerCollection
然後就沒重要的事情生產者線程添加不同的工作項目優先級,消費者線程將首先刪除高優先級的項目。
相關問題
- 1. RabbitQM多個隊列或單個隊列?
- 2. advancedDataGrid與兩個提供者
- 3. 合併兩個std ::隊列
- 4. 提供一個提供商的單個實例爲組件
- 5. TFS任務隊列端點
- 6. 可以將兩個數組標記爲單個隊列嗎?
- 7. MassTransit:多個使用者,單獨的隊列/端點,郵件未遞送
- 8. 兩個提供相同的渲染
- 9. 有兩個索引的有序隊列
- 10. 使用兩個堆棧的隊列
- 11. 的Heroku從SSL端點提供
- 12. 谷歌雲端點與另一個oAuth2提供商
- 13. Spring - 兩個持久化單元與不同的JPA提供者
- 14. 一個ServiceHost,兩個端點(net.tcp&basic http)
- 15. 訪問提供了兩個.cpp文件
- 16. CloubBlockBlob AcquireLease提供兩個租賃給兩個工作者角色
- 17. 消耗兩個隊列rabbitmq pika python
- 18. mergeChangesFromContextDidSaveNotification兩個私有隊列上下文
- 19. C++傳遞兩個整數到隊列
- 20. 扭矩設置兩個隊列?
- 21. 使用堆棧兩個隊列
- 22. 將一個隊列實例的前端複製到另一個隊列實例的後端
- 23. 兩個提交表單
- 24. AWS定製單個ELB以提供兩種服務
- 25. 從兩個端點訪問java的WCF
- 26. C#隊列 - 如何將結構添加到每個隊列點
- 27. common lisp cons從兩個符號創建一個列表,clojure缺點需要一個seq來提供?
- 28. JSF:驗證在兩個字段中提供的值或不提供這兩個字段
- 29. GAE任務隊列擊中端點API
- 30. 爲什麼Java提供了兩種從隊列中移除元素的方法?
爲什麼不使用具有優先級的單個隊列,這裏有一些建議:http://stackoverflow.com/questions/4016509/concurrent-priority-queue-in-net-4-0 – 2013-04-08 11:34:01
所有這些實現問題取決於非常依賴於您的技術堆棧。即Web,桌面,WCF? – 2013-04-08 11:36:26