首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >馈送单个端点的两个队列

馈送单个端点的两个队列
EN

Stack Overflow用户
提问于 2013-04-08 19:20:43
回答 2查看 90关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-08 19:33:21

ConcurrentQueue Class提供了一个线程安全的队列实现。您可以将两个实例粘合在一起以形成您的优先级队列,并实现IProducerConsumerCollection Interface,以便可以将其包装在BlockingCollection Class中。然后,任何线程都可以将项添加到队列中,一个线程使用GetConsumingEnumerable Method使用这些项。

代码语言:javascript
复制
enum Priority
{
    Low,
    High,
}
代码语言:javascript
复制
struct Prioritized<T>
{
    public Priority Priority;
    public T Item;
}
代码语言:javascript
复制
class PriorityQueue<T> : IProducerConsumerCollection<Prioritized<T>>
{
    private readonly ConcurrentQueue<T> low;
    private readonly ConcurrentQueue<T> high;

    ...
}
票数 1
EN

Stack Overflow用户

发布于 2013-04-08 19:43:19

为您的队列使用BlockingCollection,并使用ConcurrentPriorityQueue对其进行备份

您将创建ConcurrentPriorityQueue并将其传递给the BlockingCollection constructor that accepts an IProducerConsumerCollection

然后,无论生产者线程添加不同优先级的工作项的顺序是什么,消费者线程都会首先删除高优先级的项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15877757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档