从 ConcurrentStack 底部删除项目<T>或同等功能

问题描述 投票:0回答:2

我一直在寻找问题的答案,但还没有找到解决问题的好方法。 我想做的基本上是有一个并发集合,有点像

ConcurrentStack<T>
但我需要能够从堆栈底部删除项目。这是因为我希望堆栈只有一定的长度,因此当集合变得太大时,任何旧项目都会从底部删除。

并发堆栈在添加对象时效果很好,但从底部删除它们是我无法弄清楚的。

我还有一个想法,就是拥有一个

ConcurrentDictionary<TKey, TValue>
,我可以在其中跟踪添加的日期和存储的对象,然后根据最后的日期删除项目。

任何帮助/想法将不胜感激。

c# multithreading concurrency concurrent-collections
2个回答
1
投票

我认为你需要ConcurrentQueue类


-1
投票

使用ConcurrentQueue是正确的选择。 向其中添加项目时,请使用 .Enqueue() (这会将项目添加到队列末尾)。使用 TryDequeue() 从队列开头删除项目。

示例,将队列大小限制为 500:

foreach(var e in eventModels)
{
    eventQueue.Enqueue(e);

    while (eventQueue.Count() >= 500)
    {
        eventQueue.TryDequeue(out EventModel? result);
    }
}

对于我的应用程序,在顶部显示最新项目的结果是有意义的 - 我只使用:eventQueue.Reverse().ToList()。

© www.soinside.com 2019 - 2024. All rights reserved.