在 C# 开发中,当我们需要对大量数据进行处理时,传统的 foreach 循环可能会因为单线程执行而显得效率低下。这时,C# Parallel.ForEach 就派上用场了!它能帮助我们轻松实现并行处理集合,大幅提升程序性能。本文将从零开始,手把手教你如何使用 Parallel.ForEach 进行多线程编程C#,即使是编程新手也能轻松上手。
Parallel.ForEach 是 .NET Framework 4.0 引入的 System.Threading.Tasks.Parallel 类中的一个静态方法,用于对集合中的每个元素并行执行操作。与普通 foreach 不同,它会自动利用多个 CPU 核心,将任务分配到多个线程中同时执行,从而实现高性能C#循环。
最简单的用法如下:
using System;using System.Collections.Generic;using System.Threading.Tasks;List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };Parallel.ForEach(numbers, number =>{ Console.WriteLine($"处理数字: {number}, 线程ID: {Task.CurrentId}");}); 运行这段代码,你会发现输出顺序是乱的,并且每个任务可能由不同的线程执行(通过 Task.CurrentId 可以看到线程 ID)。这正是并行处理的特点:不保证顺序,但速度快!
由于多个线程同时运行,如果你在循环体中修改共享变量(如累加、写入同一个列表等),就可能出现线程安全问题。例如:
// ❌ 错误示例:非线程安全int sum = 0;Parallel.ForEach(numbers, n =>{ sum += n; // 多个线程同时修改 sum,结果不可预测!}); 正确做法是使用线程本地变量或锁机制。推荐使用 Interlocked 或 lock,或者更好的方式是使用 Parallel.ForEach 的重载版本支持局部状态:
// ✅ 正确示例:使用局部状态object lockObj = new object();int total = 0;Parallel.ForEach(numbers, () => 0, (n, loopState, localSum) =>{ return localSum + n;},localFinalSum =>{ lock (lockObj) { total += localFinalSum; }});Console.WriteLine($"总和: {total}"); 如果只是简单打印或轻量操作,使用 Parallel.ForEach 反而可能因线程调度开销导致性能下降。因此,请根据实际场景权衡使用。
Parallel.ForEach 是 C# 中实现并行处理集合的强大工具,能显著提升程序性能。但要注意线程安全问题,并合理评估是否真的需要并行化。掌握这项技术,你就能写出更高效的高性能C#循环代码!
希望这篇教程能帮助你理解 C# Parallel.ForEach 和 多线程编程C# 的核心概念。快去试试吧!
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122756.html