每个组FIFO阻塞收集多个使用者

时间:2018-11-12 10:39:29

标签: c# queue fifo

我只有一个生产者,可以将消息插入BlockingCollection。

集合中的每个消息都有一个groupId。不同groupId的计数是动态的。每个组的消息必须按FIFO顺序处理。 消费者所做的工作是一个小的计算和一个数据库插入,有时是一个附加的http请求。

我尝试为每个groupId创建一个新的使用者线程-但是线程过多会带来问题。

当我创建50个消费者线程时,消息的处理速度要快得多:

for (int i = 0; i < 50; i++)
{
    Task.Factory.StartNew(() =>
    {
        foreach (var item in _queue.GetConsumingEnumerable())
        {
            var group = item.groupId;
            // do work
        }
    }
}

但是使用此代码,不会按序列顺序处理每个groupId的消息。

是否有一种简单的方法可以使用户对每个groupId保持“粘性”?

例如:当使用者3处理了具有groupId 7的消息时,使用者3必须处理所有其他具有groupId 7的消息。

0 个答案:

没有答案