ConcurrentDictionary 是 C# 中线程安全的高并发字典,无需手动加锁;支持 TryAdd、AddOrUpdate、GetOrAdd、TryGetValue、TryRemove 等原子操作,遍历时提供快照视图,不保证顺序但安全可靠。

ConcurrentDictionary 是 C# 中专为高并发场景设计的线程安全字典,不用手动加锁就能安全地在多个线程中读写。它比 Dictionary + lock 更高效,尤其适合读多写少或频繁增删查的场景。
初始化和基本添加
创建实例很简单,泛型参数和普通字典一样:
var dict = new ConcurrentDictionary();
添加键值对推荐用 TryAdd,失败时不会抛异常,返回 false(比如键已存在):
-
dict.TryAdd("key1", 100);—— 成功返回 true -
dict["key2"] = 200;—— 也可直接赋值,线程安全
安全地更新已有值
避免“读-改-写”竞态,别用 dict[key]++ 这种写法。要用原子方法:
-
dict.AddOrUpdate("key1", 100, (k, v) => v + 1);—— 不存在则加,存在则按委托更新 -
dict.GetOrAdd("key3", k => ComputeExpensiveValue(k));—— 查无则计算并存入,只执行一次
安全读取和条件删除
读取推荐用 TryGetValue,比直接索引器更安全(不抛 KeyNotFoundException):
if (dict.TryGetValue("key1", out int value)) { /* 使用 value */ }-
dict.TryRemove("key2", out int removed);—— 存在才删,返回被删值
遍历和注意事项
遍历时看到的是某一个时间点的快照,不保证反映实时全量数据(但不会抛异常或崩溃):
- 可用
foreach (var kvp in dict)安全遍历 - 不要在遍历时调用
Clear()或大量修改,虽不崩溃但逻辑可能混乱 - 内部按分区实现,并发性能好,但不保证枚举顺序
基本上就这些。用对方法,ConcurrentDictionary 写并发代码既简洁又可靠。










