C#基础之线程安全集合讲解
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:36
partitioner = Partitioner.Create(data, EnumerablePartitionerOptions.NoBuffering); // 并行处理结果 Parallel.ForEach(partitioner, (item, state, index) => {
Console.WriteLine($"处理元素开始: {item}, 原始索引: {index},时间:{DateTime.Now.ToString("HH:mm:ss:fff")}");
// 模拟处理逻辑
Thread.Sleep(100);
result[index] = item;
}); Console.WriteLine($“result中的元素为:{string.Join(”,“, result)},时间:{DateTime.Now.ToString(”HH:mm:ss:fff“)}”);
输出:
```shell
处理元素开始: 6, 原始索引: 5,时间:14:29:23:015
处理元素开始: 7, 原始索引: 6,时间:14:29:23:019
处理元素开始: 8, 原始索引: 7,时间:14:29:23:019
处理元素开始: 2, 原始索引: 1,时间:14:29:23:019
处理元素开始: 3, 原始索引: 2,时间:14:29:23:019
处理元素开始: 5, 原始索引: 4,时间:14:29:23:019
处理元素开始: 9, 原始索引: 8,时间:14:29:23:015
处理元素开始: 1, 原始索引: 0,时间:14:29:23:015
处理元素开始: 10, 原始索引: 9,时间:14:29:23:015
处理元素开始: 4, 原始索引: 3,时间:14:29:23:015
result中的元素为:1,2,3,4,5,6,7,8,9,10,时间:14:29:23:155
从输出可以看到,因为在每个任务处理时,能够明确知道当前任务的索引,所以也就能够处理使得结果顺序跟源顺序一致,从时间戳来看,完成10个耗时100秒的任务,总时间只用了100多毫秒,充分利用了CPU多线程性能。
总结
上述就是对 System.Collections.Concurrent 命名空间的所有成员做了比较详细的说明和应用了,我们可以通过合理选择这些集合类,可以显著简化多线程编程,同时保证高性能与线程安全。
参考链接
>
>
> [1] https://learn.microsoft.com/en-us/dotnet/api/system.collections.concurrent?view=net-9.0
>
相关文章
-
C#基础:枚举、数组、类型、函数等解析
C#基础:枚举、数组、类型、函数等解析
- 互联网
- 2026年04月20日
-
C#多线程编程精要:从用户线程到线程池的效能进化论
C#多线程编程精要:从用户线程到线程池的效能进化论
- 互联网
- 2026年04月20日
-
C# 多项目打包时如何将项目引用转为包依赖
C# 多项目打包时如何将项目引用转为包依赖
- 互联网
- 2026年04月20日
-
c#开发完整的Socks5代理客户端与服务端——客户端(已完结)
c#开发完整的Socks5代理客户端与服务端——客户端(已完结)
- 互联网
- 2026年04月20日
-
C#实现MCP Client 与 LLM 连接,抓取网页内容功能!
C#实现MCP Client 与 LLM 连接,抓取网页内容功能!
- 互联网
- 2026年04月20日
-
C#线程池核心技术:从原理到高效调优的实用指南
C#线程池核心技术:从原理到高效调优的实用指南
- 互联网
- 2026年04月20日





