【发布时间】:2018-10-11 07:17:13
【问题描述】:
我正在寻找一个可以从双方访问的并发集合。我想实现以下目标:
- 一些生产者添加项目
- 客户端应该能够显示最后 n 个生产的项目
- 集合应仅包含在过去 x 小时内生成的元素
所以我需要访问列表顶部 (FIFO) 以显示最后的 n 项,但我还需要访问列表末尾 (LIFO) 以修剪早于 x 小时连续。
【问题讨论】:
-
为什么不能同时使用?使用
Add方法将它们包装到一个类中,这会将给定的项目添加到两者中 -
@Fabio:您将不得不使用某种锁定机制来同步对两个单独集合的访问,但是您也可以使用由锁保护的单个列表,这应该是解决问题的方法.但是,这个问题特别提到了一个并发集合。
-
@Fabio 堆栈将填满,无法删除旧项目。
-
一个 FIFO 数据结构总是在开头有它最旧的项。所以队列中的第一个项目是最旧的而不是最后一个。要删除超过特定时间跨度的项目,您必须在显示之前验证您出列的每个项目,或者定期从头到尾删除项目范围。您是否检查过允许生产者发出生产结束信号的 BlockingCollection? msdn.microsoft.com/en-us/library/dd287247(v=vs.110).aspx
-
@ManuelFaux,您可以使用
MemoryCache删除“过期”项目
标签: c# .net multithreading collections