我经常需要处理一个项目队列,任何用户都不能阻止队列,并且队列中的项目应该按某种顺序处理。我经常编写一个类来执行此操作,但我认为应该有一些通用版本,但我找不到。
所以我正在寻找一个队列类,我可以在其中指定类型、分区选择器和排序选择器,这样我就可以将对象添加到队列中,然后当我取回对象时,我得到由我的顺序说明符排序的下一个分区中的第一个对象。
例如,我会这样调用指定如何分区以及如何对队列进行排序:
var queue = new RoundRobinQueue<Message>(
_ => _.UserID,
_ => _.SendDate
);
在我添加了很多消息之后,我可以Parallel.ForEach
我队列中的项目并按照最早的 SendDate
的顺序为下一个处理它们用户
。这样,如果一个用户速度慢,他的项目不会阻塞队列,因为他只有一个线程,但如果只有一个用户,他是唯一的分区,所以他可以得到所有线程。
我找遍了所有地方,但没能在 C# 中找到一个很好的通用实现。有什么想法吗?
最佳答案
查看 System.Collections.Concurrent
中定义的类。有一个通用的 ConcurrentQueue 以及更多用于生产者-消费者模式的基本构建 block 。
可用的类和接口(interface)总结在 MSDN 上.
关于c# - 通用 c# 循环(分区/排序)队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943581/