Ðаn*_*Ðаn 4 .net linq concurrentdictionary
如果我有一个实例,我使用该属性还是 LINQConcurrentDictionary是否重要?我宁愿写,而不是我认为更具描述性的。CountAny()dict.Any()dict.Count > 0Any()
我只关心正确性,而不关心性能。用例是
void process()
{
if (concurrentDictionary.Count <= 0) // or !Any() ?
return; // dictionary is empty, nothing to do
// ...
}
Run Code Online (Sandbox Code Playgroud)
问题IEnumerable Linq 方法线程安全吗?解决了 LINQ 查询上的 IEnumerable 方法在没有保留保护集合的特定锁的情况下不是线程安全的事实。
可以查看ConcurrentDictionary的参考代码,发现枚举器不提供线程安全的快照。另外ConcurrentDictionary.GetEnumerator的 MSDN 文档指出:
从字典返回的枚举器可以安全地与字典的读取和写入同时使用,但它并不代表字典的即时快照。通过枚举器公开的内容可能包含调用 GetEnumerator 后对字典所做的修改
Count 属性对字典进行完全锁定并返回一致的结果。
因此,根据您是否想要锁定字典来运行Any()它,检查Count > 0.
| 归档时间: |
|
| 查看次数: |
2374 次 |
| 最近记录: |