ConcurrentDictionary 的列表顺序是不是得到保证?

Posted

技术标签:

【中文标题】ConcurrentDictionary 的列表顺序是不是得到保证?【英文标题】:Is the list order of a ConcurrentDictionary guaranteed?ConcurrentDictionary 的列表顺序是否得到保证? 【发布时间】:2021-01-27 02:52:46 【问题描述】:

我使用 ConcurrentDictionary 来存储日志行,当我需要向用户显示它们时,我调用 ToList() 来生成一个列表。但奇怪的是,有些用户在列表中最先收到最新的行,而从逻辑上讲,他们应该排在最后。

这是因为 ConcurrentDictionary 不保证 IEnumerate 接口上的持久顺序,还是可能是什么原因?

【问题讨论】:

显示数据时按日期时间值排序。 @usr 我正计划这样做,但这是一种解决方法。我想先了解它为什么会发生。 【参考方案1】:

没有ConcurrentDictionary(和Dictionary<T>)不保证列表中键的顺序。您必须使用不同的数据类型或自己执行排序。对于非并发代码,您可以使用 SortedDictionary<T>,但我认为并发集合中没有类似物。

【讨论】:

【参考方案2】:

没有。不保证 ConcurrentDictionary 的列表顺序,行可以以任意顺序出现。

【讨论】:

以上是关于ConcurrentDictionary 的列表顺序是不是得到保证?的主要内容,如果未能解决你的问题,请参考以下文章

ConcurrentDictionary

.NET 锁定还是 ConcurrentDictionary?

.NET - 字典锁定与 ConcurrentDictionary

ConcurrentDictionary和线程

ConcurrentDictionary与Dictionary 替换

dapper.net,如何刷新 ConcurrentDictionary?