c# - 将字典重构为 ConcurrentDictionary
问题描述
目前我有一些异步方法都试图从字典中更新和读取
附带问题:异步函数会导致 KeyNotFoundException 和 NullReferenceException 吗?我只是在做
_dictonary[myString] = myObject
无论如何。我想Dictionary<string,object>
用ConcurrentDictionary<string, object
> 替换所有内容。我根本不在乎某个线程是否在另一个线程写入数据之前/之后获取数据。
Dictionary
如果我只是将文本全部替换为ConcurrentDictionary
并成功编译,我会遇到什么麻烦吗?
解决方案
InternallyConcurrentDictionary
的索引器方法使用TryGetValue
和相同。TryAddInternal
TryAdd
除非您的键为空,否则设置值不应引发异常。它应该像您期望的那样工作(尽管在您再次阅读之前可能会出现另一个线程并对其进行更改)。
KeyNotFoundException
如果在字典中找不到密钥,您仍然会得到一个。如果您希望一个线程插入一个值,然后您尝试使用concurrentDictionary[key]
. TryGetValue
如果您在这方面想要安全,我建议您使用。
推荐阅读
- javascript - 收到回复后只刷新一次页面
- python - 如何使用 xgboost 在选择的特征数量较少的情况下获得最高精度?
- r - 原子向量使用哪种打印方法?
- go - 使用 Go 模块导入本地模块时缺少 ziphash 错误
- apache-kafka - KSQL 表是否应该为聚合的每个键显示多行?
- xml - Hugo 网站在使用自定义站点地图时仅在文档错误开始时提供 XML 声明
- python - 使用 Hyperopt 进行逻辑回归时无法腌制模块对象
- python - 如何格式化 Python 的 difflib.HtmlDiff 的输出以使其可读?
- python - 在 Python 中的二维矩阵中查找最高值“区域”
- angular - 升级到 Angular 通用错误检索图标 google-colored 后