ConcurrentDictionary 是 C# 中专为高并发场景设计的线程安全字典,不用手动加锁就能安全地在多个线程中读写。它比
Dictionary<tkey tvalue></tkey>+
lock更高效,尤其适合读多写少或频繁增删查的场景。
初始化和基本添加
创建实例很简单,泛型参数和普通字典一样:
var dict = new ConcurrentDictionary<string, int>();
添加键值对推荐用
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 写并发代码既简洁又可靠。
