首页 > 解决方案 > 将字典重构为 ConcurrentDictionary

问题描述

目前我有一些异步方法都试图从字典中更新和读取

附带问题:异步函数会导致 KeyNotFoundException 和 NullReferenceException 吗?我只是在做 _dictonary[myString] = myObject

无论如何。我想Dictionary<string,object>ConcurrentDictionary<string, object> 替换所有内容。我根本不在乎某个线程是否在另一个线程写入数据之前/之后获取数据。

Dictionary如果我只是将文本全部替换为ConcurrentDictionary并成功编译,我会遇到什么麻烦吗?

标签: c#.netmultithreading

解决方案


InternallyConcurrentDictionary的索引器方法使用TryGetValue和相同。TryAddInternalTryAdd

除非您的键为空,否则设置值不应引发异常。它应该像您期望的那样工作(尽管在您再次阅读之前可能会出现另一个线程并对其进行更改)。

KeyNotFoundException如果在字典中找不到密钥,您仍然会得到一个。如果您希望一个线程插入一个值,然后您尝试使用concurrentDictionary[key]. TryGetValue如果您在这方面想要安全,我建议您使用。


推荐阅读