7

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

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

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

 var queue = new RoundRobinQueue<Message>(
            _ => _.UserID,
            _ => _.SendDate
            );

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

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

4

1 回答 1

-1

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

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

于 2012-12-19T00:35:40.300 回答