我一直在寻找问题的答案,但还没有找到解决问题的好方法。 我想做的基本上是有一个并发集合,有点像 ConcurrentStack,但我需要能够从堆栈底部删除项目。这是因为我希望堆栈只有一定的长度,因此当集合变得太大时,任何旧项目都会从底部删除。
并发堆栈在添加对象时效果很好,但从底部删除它们是我无法弄清楚的。
我还想拥有一个 ConcurrentDictionary,在其中跟踪添加的日期和存储的对象,然后根据最后的日期删除项目?
任何帮助/想法将不胜感激。
我认为你需要ConcurrentQueue类
使用ConcurrentQueue是正确的选择。 向其中添加项目时,请使用 .Enqueue() (这会将项目添加到队列末尾)。使用 TryDequeue() 从队列开头删除项目。
示例,将队列大小限制为 500:
foreach(var e in eventModels)
{
eventQueue.Enqueue(e);
while (eventQueue.Count() >= 500)
{
eventQueue.TryDequeue(out EventModel? result);
}
}
对于我的应用程序,在顶部显示最新项目的结果是有意义的 - 我只使用:eventQueue.Reverse().ToList()。