【发布时间】:2013-06-10 19:53:21
【问题描述】:
我想限制 BlockingCollection 的大小。如果我想添加另一个项目并且集合已满,则必须删除最旧的项目。是否有特定于此任务的类或我的解决方案可以?
BlockingCollection<string> collection = new BlockingCollection<string>(10);
string newString = "";
//Not an elegant solution?
if (collection.Count == collection.BoundedCapacity)
{
string dummy;
collection.TryTake(out dummy);
}
collection.Add(newString);
EDIT1:这里有类似的问题:ThreadSafe FIFO List with Automatic Size Limit Management
【问题讨论】:
-
这不再是一个线程安全的集合,将被删除的内容是完全不可预测的。像缓存一样的嘎嘎声,请查看 MemoryCache 类。
-
您的目标是什么?你能不做任何事情就扔掉被移除的物品吗?
-
@Hans Passant,嘿!你无处不在! :) 我不明白为什么它不再是线程安全的......
-
@MatthewWatson 我需要消费最新的商品,消费/生产速度可能会有所不同。
标签: c# producer-consumer lru