.NET 5种线程安全集合

在.NET中,有许多种线程安全的集合类,下面介绍五种我们常用的线程安全集合以及他们的基本用法。

ConcurrentBag

ConcurrentBag 是一个线程安全的无序包。它适用于在多线程环境中频繁添加和移除元素的情况。

cs 复制代码
ConcurrentBag<int> concurrentBag = new ConcurrentBag<int>();
 
// 添加元素
concurrentBag.Add(1);
 
// 尝试添加元素
concurrentBag.TryAdd(2);
 
// 移除元素
int item;
concurrentBag.TryTake(out item);

ConcurrentQueue

ConcurrentQueue 是一个线程安全的无序队列。它适用于在多线程环境中频繁添加元素和移除元素(通常是先进先出方式)的情况。

cs 复制代码
ConcurrentQueue<int> concurrentQueue = new ConcurrentQueue<int>();
 
// 添加元素
concurrentQueue.Enqueue(1);
 
// 尝试添加元素
bool isSuccess = concurrentQueue.TryEnqueue(2);
 
// 移除元素
int item;
bool isRemoved = concurrentQueue.TryDequeue(out item);

ConcurrentStack

ConcurrentStack 是一个线程安全的堆栈。它适用于在多线程环境中频繁添加元素和移除元素(通常是后进先出方式)的情况。

cs 复制代码
ConcurrentStack<int> concurrentStack = new ConcurrentStack<int>();
 
// 添加元素
concurrentStack.Push(1);
 
// 尝试添加元素
bool isSuccess = concurrentStack.TryPush(2);
 
// 移除元素
int item;
bool isRemoved = concurrentStack.TryPop(out item);

ConcurrentDictionary<TKey, TValue>

ConcurrentDictionary<TKey, TValue> 是一个线程安全的字典。它适用于在多线程环境中频繁添加、移除和查找键值对的情况。

cs 复制代码
ConcurrentDictionary<int, string> concurrentDictionary = new ConcurrentDictionary<int, string>();
 
// 添加或更新键值对
concurrentDictionary.AddOrUpdate(1, "One", (key, oldValue) => "NewOne");
 
// 尝试添加或更新键值对
bool isSuccess = concurrentDictionary.TryAdd(2, "Two");
bool isUpdated = concurrentDictionary.TryUpdate(2, "NewTwo", "Two");
 
// 移除键值对
string removedValue;
bool isRemoved = concurrentDictionary.TryRemove(1, out removedValue);
 
// 获取值
string value;
bool isFound = concurrentDictionary.TryGetValue(1, out value);

BlockingCollection

BlockingCollection 是线程安全的集合,提供了可阻塞的添加和移除方法

cs 复制代码
BlockingCollection<int> blockingCollection = new BlockingCollection<int>();
 
// 添加元素,如果集合已满,则阻塞当前线程
blockingCollection.Add(1);
 
// 移除元素,如果集合为空,则阻塞当前线程
int item = blockingCollection.Take();
相关推荐
唐青枫19 小时前
C#.NET SignalR 深入解析:实时通信、Hub 与连接管理实战
c#·.net
hez20101 天前
Satori GC:同时做到高吞吐、低延时和低内存占用
c#·.net·.net core·gc·clr
牧马人win2 天前
.NET 开发 MCP 服务器完全指南:打造智能数据库查询助手
ai·.net·mcp
唐青枫2 天前
C#.NET Channel 深入解析:高性能异步生产者消费者模型实战
c#·.net
用户962377954484 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主5 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
国思RDIF框架6 天前
RDIFramework.NET CS 敏捷开发框架 V6.3 版本重磅发布!.NET8+Framework双引擎,性能升级全维度进化
后端·.net
用户298698530147 天前
.NET 文档自动化:Spire.Doc 设置奇偶页页眉/页脚的最佳实践
后端·c#·.net