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

请说明在 C# 中通过 Parallel.Invoke 同时运行多个操作的实现方式。

技术原理C#

考察说明

考查对 C# 并行编程中 Parallel.Invoke 的理解,包括其用法、执行方式及并行度的控制。

回答思路

  1. 【回答框架 1】Parallel.Invoke 是 .NET 中 System.Threading.Tasks 命名空间下的静态方法,用于并行执行多个 Action 委托。它接受一个 params Action[] 参数,调用后会将每个操作封装为任务,并利用线程池调度执行,默认情况下尽可能使用多核CPU。
  2. 【回答框架 2】使用 Parallel.Invoke 时,通常以 Parallel.Invoke(() => Op1(), () => Op2(), ...) 的形式传入操作。该方法会阻塞调用线程,直到所有操作完成。若需取消,可传入 ParallelOptions 和 CancellationToken,但需要操作本身支持取消。
  3. 【回答框架 3】执行并行度由运行时自动决定,受 CPU 核心数和线程池状态影响,并非总是创建与操作数量相同的线程。可通过 ParallelOptions.MaxDegreeOfParallelism 限制最大并行度。
  4. 【回答框架 4】Parallel.Invoke 适用于彼此独立且 CPU 密集型或可并行化的任务,但不适合需要精确控制执行顺序或包含大量异步 I/O 的场景。
  5. 【关键点 1】使用 Parallel.Invoke 传入多个 Action,并行执行并阻塞等待完成。
  6. 【关键点 2】并行度受系统资源和线程池影响,可用 ParallelOptions 控制最大并行度。
  7. 【关键点 3】操作间必须独立,不可修改共享状态而无同步。
  8. 【易错点 1】误以为传入的操作数量等于线程数量,实际由线程池动态调度。
  9. 【易错点 2】在循环中使用 Parallel.Invoke 但无退出条件可能导致线程耗尽。
  10. 【易错点 3】在操作中修改共享变量而未同步,引发竞态条件。