我经常需要处理一个项目队列,其中没有一个用户应该能够阻止队列,并且队列中的项目应该按某种顺序处理。我经常写一个类来做到这一点,但我认为应该有一些通用版本,但我找不到。
所以我正在寻找一个队列类,我可以在其中指定一个类型、一个分区选择器和一个排序选择器,这样我就可以将对象添加到队列中,然后当我取出对象时,我从我的订单说明符订购的下一个分区。
例如,我会这样调用,指定如何分区以及如何对队列进行排序:
var queue = new RoundRobinQueue<Message>(
_ => _.UserID,
_ => _.SendDate
);
在我添加了很多消息之后,我可以Parallel.ForEach
将队列中的项目按照最早的顺序处理它们以SendDate
供下一个User
。这样,如果一个用户很慢,他的项目不会阻塞队列,因为他只得到一个线程,但如果只有一个用户,他是唯一的分区,所以他得到所有线程。
我看了一遍,但在 C# 中找不到一个很好的通用实现。有任何想法吗?