具有自动大小限制管理的ThreadSafe FIFO列表

Ada*_*ile 6 c# queue list

我正在试图弄清楚要使用的数据类型......基本上我想要一个线程安全的FIFO队列,并且一旦达到预先指定的限制就会自动抛出足够多的数据.

嗯,实际上,也许更多的是列表,因为我不希望整个概念推入队列并从队列中弹出一个项目,此时它已不再可用.

用例基本上是一个播放列表,我最多有5个即将到来的项目,当前正在播放的项目,然后是大约20个已播放的项目.因此,为什么我猜它不能是一个队列,我将访问中间的一个项目作为"当前"项目.当列表变得很大时,我宁愿不必手动管理丢弃旧物品......显然我可以自己写这些,但如果C#已经存在,我不想重新发明轮子.

我能用什么的想法?

Yah*_*hia 3

在框架中,有一些东西几乎具有您想要的功能 - ConcurrentQueue. 它是线程安全的队列,大多数操作都是无锁实现的,因此速度非常快。

唯一没有的功能是“限制”和自动“扔掉”......

但这可以很容易地添加 - 只需创建您自己的包含私有的类ConcurrentQueue,并通过出队/扔掉在您的公共入队方法中实现“扔掉部分”,直到在将新元素入队之前满足您的限制。

编辑 - 根据评论
一种选择是使第二个“队列”成为ObservableCollection- 尽管本质上不是线程安全的(注意),但这很容易在 WPF 中绑定...

另一种方法是让你的类相应地实现ObservableCollection接口(由 组成IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged) - 这听起来很多,但是大多数这些你可以通过中继到内部轻松实现ConcurrentQueue,所以没有太多实际代码需要编写......
请参阅http:// /msdn.microsoft.com/en-us/library/ms752347.aspx