我知道使用 ConcurrentQueue 的 BlockingCollection 的 boundedcapacity 为 100。
但是我不确定那是什么意思。
我正在尝试实现一个并发缓存,如果队列大小太大,它可以出列,可以在一个操作中出列/入列(即缓存溢出时松散消息)。有没有办法为此使用 boundedcapacity,还是手动执行此操作或创建新集合更好。
基本上我有一个阅读线程和几个写作线程。如果队列中的数据是所有写入器中“最新鲜”的,我会喜欢它。
最佳答案
N 的有界容量意味着如果队列已经包含 N 个项目,任何试图添加另一个项目的线程都将阻塞,直到另一个线程删除一个项目。
您似乎想要的是一个不同的概念 - 您希望最近添加的项目是第一个被消费线程出列的项目。
您可以使用 ConcurrentStack
来实现这一点而不是底层存储的 ConcurrentQueue。
您将使用 this constructor
并传入一个 ConcurrentStack
。
例如:
var blockingCollection = new BlockingCollection<int>(new ConcurrentStack<int>());
通过使用 ConcurrentStack
,您可以确保消费线程出队的每个项目都是当时队列中最新鲜的项目。
另请注意,如果您为阻塞集合指定上限,则可以使用 BlockingCollection.TryAdd()
如果在您调用它时集合已满,它将返回 false
。
关于c# - BlockingCollection 最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928642/