通用c#循环(分区/排序)队列

pow*_*tte 6 c# linq queue round-robin

我经常需要处理一个项目队列,其中没有一个用户应该能够阻塞队列,并且队列中的项目应该按某种顺序处理.我经常写一个类来做这个,但我认为应该有一些通用版本,但我找不到一个.

所以我正在寻找一个队列类,我可以在其中指定一个类型,一个分区选择器和一个选择器,以便我可以将对象添加到队列中,然后当我将对象退出时,我从第一个对象中获取我的订单说明符排序的下一个分区.

例如,我会像这样调用如何分区以及如何对队列进行排序:

 var queue = new RoundRobinQueue<Message>(
            _ => _.UserID,
            _ => _.SendDate
            );
Run Code Online (Sandbox Code Playgroud)

后,我已经添加了很多信息的,我可以Parallel.ForEach在我的队列中的项目,并处理它们在最早的顺序SendDate下一个User.这样,如果一个用户很慢,他的项目将不会阻塞队列,因为他只获得一个线程,但如果只有一个用户,他是唯一的分区,所以他获得所有线程.

我看了一遍,但在C#中找不到一个很好的通用实现.有任何想法吗?

Mor*_*ner -1

查看 中定义的类System.Collections.Concurrent。有一个通用的 ConcurrentQueue 以及用于生产者-消费者模式的更基本的构建块。

MSDN上总结了可用的类和接口。