假设我有两个队列持有类似的消息类型以发送到端点。其中一个队列(队列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