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

请解释 C# 中 Task.Yield 方法的作用,并阐述在哪些场景下需要主动调用它?

性能优化技术原理C#

考察说明

考查对 Task.Yield 机制的理解及其在异步编程中的实际应用场景。

回答思路

  1. 【回答框架 1】Task.Yield 创建一个返回 YieldAwaitable 的 awaitable,调用它会使当前异步方法立即返回,并将后续执行调度回当前的同步上下文或线程池。它的核心作用是主动让出执行权,而不是等待任何异步操作完成。
  2. 【回答框架 2】典型场景包括:在 UI 线程上执行长时间 CPU 密集型循环时,定期调用 Task.Yield 让出控制权,使 UI 保持响应;在递归异步方法中防止深度递归导致调用栈增长;用于实现公平调度,避免某个任务独占线程池。
  3. 【关键点 1】Task.Yield 不等待任何操作,仅作为让出执行权的异步点。
  4. 【关键点 2】它会将后续代码调度到当前同步上下文(如有)或线程池。
  5. 【关键点 3】常用于 UI 线程的循环中维持响应性,或避免线程池饥饿。
  6. 【易错点 1】不要误认为 Task.Yield 会等待固定时间,它只是立即让出。
  7. 【易错点 2】在无同步上下文的控制台应用中,过度使用可能导致性能下降,因频繁上下文切换。