我想限制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
答案 0 :(得分:2)
答案 1 :(得分:2)
您的解决方案将正常运行,但它不是线程安全的。 BlockingCollection<T>
没有提供直接处理此问题的机制。
您的解决方案可能仍然会阻止(如果另一个线程在Add()
之后调用TryTake
)或可能删除一个额外的项目(如果您还要移除另一个线程则删除)。