gpt4 book ai didi

.net - ConcurrentDictionary.Count > 0 是否与 ConcurrentDictionary.Any() 相同?

转载 作者:行者123 更新时间:2023-12-01 08:53:53 29 4
gpt4 key购买 nike

如果我有一个 ConcurrentDictionary例如,我是否使用 Count 有关系吗?属性(property)或LINQ的Any() ?我宁愿写 dict.Any()而不是 dict.Count > 0正如我所想 Any()更具描述性。

我只关心正确性,而不是性能。用例是

void process()
{
if (concurrentDictionary.Count <= 0) // or !Any() ?
return; // dictionary is empty, nothing to do

// ...
}

最佳答案

问题Are IEnumerable Linq methods thread-safe?解决了这样一个事实,即 LINQ 查询上的 IEnumerable 方法在没有保持特定锁保护集合的情况下不是线程安全的。

你可以看看reference code for ConcurrentDictionary查看枚举器不提供线程安全快照。附加的 MSDN 文档 ConcurrentDictionary.GetEnumerator状态:

The enumerator returned from the dictionary is safe to use concurrently with reads and writes to the dictionary, however it does not represent a moment-in-time snapshot of the dictionary. The contents exposed through the enumerator may contain modifications made to the dictionary after GetEnumerator was called



Count 属性对字典进行完全锁定并返回一致的结果。

所以取决于你是否想锁定字典来运行 Any()检查 Count > 0 可能更干净.

关于.net - ConcurrentDictionary.Count > 0 是否与 ConcurrentDictionary.Any() 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399256/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com