C#怎么使用ConcurrentDictionary C#线程安全字典用法

来源:这里教程网 时间:2026-02-21 17:39:26 作者:

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 写并发代码既简洁又可靠。

相关推荐