C#面试题更新 2026-08-03

请说明在 C# 中,Parallel.For 与 Parallel.ForEach 各自的作用机制和使用方法,以及它们之间的区别和适用场景。

考察说明

考查对 C# 并行循环 API 的理解与正确使用。

回答思路

  1. 【回答框架 1】Parallel.For 是并行执行固定次数的迭代,每个迭代可能在不同线程上运行。它类似于 for 循环,但迭代顺序不保证。Parallel.ForEach 用于并行遍历 IEnumerable 或数组等集合,为每个元素执行操作。两者都来自 System.Threading.Tasks 命名空间。
  2. 【回答框架 2】使用时需注意线程安全,避免在迭代体中修改共享可变状态。可以设置 ParallelOptions 控制最大并行度或取消令牌。Parallel.ForEach 支持分区器(Partitioner)优化负载均衡,并提供了带有循环状态(如 Break、Stop)的重载用于提前终止。
  3. 【回答框架 3】区别在于 Parallel.For 适用于基于索引的循环,Parallel.ForEach 更灵活,适用于集合遍历。选择时考虑数据结构和并行度需求,性能需通过实际压测验证。
  4. 【回答框架 4】合理使用并行循环能提升多核利用率,但需权衡开销,小规模循环或轻量操作可能不适合。
  5. 【回答框架 5】可结合 CancellationTokenSource 实现优雅取消,并处理 AggregateException 捕获并行任务中抛出的异常。
  6. 【关键点 1】Parallel.For 并行执行固定次数迭代,适合索引型循环;Parallel.ForEach 并行遍历集合。
  7. 【关键点 2】迭代体必须线程安全,避免共享可变状态。
  8. 【关键点 3】可通过 ParallelOptions 控制最大并行度和取消。
  9. 【关键点 4】Parallel.ForEach 支持分区器优化,并提供 Break 和 Stop 等控制方法。
  10. 【关键点 5】异常需通过 AggregateException 捕获处理。
  11. 【易错点 1】忽略线程安全导致数据竞争,结果不可预测。
  12. 【易错点 2】对轻量或小规模循环使用并行,性能反降。
  13. 【易错点 3】未处理异常导致程序崩溃,需捕获 AggregateException。