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

标签 c# linq queue round-robin

我经常需要处理一个项目队列,任何用户都不能阻止队列,并且队列中的项目应该按某种顺序处理。我经常编写一个类来执行此操作,但我认为应该有一些通用版本,但我找不到。

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

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

 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/

相关文章:

c# - 将字符串数组转换为双数组的最快方法?

c# - 如何将队列的值设置到另一个队列?

c - C 中的多队列

c# - 循环 - 处理 2 个未知长度列表的控制流

c# - 命名参数混淆

c# - 放大或缩小时如何使 Canvas 区域在 ScrollViewer 中居中,而不是所有内容都可以显示在查看窗口中

c# - 如何使用 linq 解析字典列表 (List<Dictionary<string, string>>)

linq列表字符串像

generics - 不安全队列实现

c# - IList<T> 作为泛型返回