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

在 C# 中,异步匿名方法是指什么?请说明如何定义并使用它们?

编码实现技术原理C#

考察说明

考查对 C# 异步编程中匿名方法结合 async/await 的理解与实际用法。

回答思路

  1. 【回答框架 1】异步匿名方法是指使用 async 关键字修饰的匿名方法(包括 lambda 表达式和匿名委托),允许在匿名方法体内使用 await 表达式,从而进行异步操作。
  2. 【回答框架 2】定义方式是先声明委托类型,例如 Func<Task>,然后用 async 关键字配合 lambda 表达式(如 async () => await SomeAsync())进行赋值,或者使用 async delegate 语法。
  3. 【回答框架 3】使用它们时,调用方需要等待返回的 Task 对象,以便异步操作完成;如果委托类型返回 void(如 Action),则无法直接 await,但事件处理器中常用 async void 形式,需注意异常处理。
  4. 【回答框架 4】在异步匿名方法中,可以捕获外部变量,但需注意捕获的变量在异步执行期间可能已被修改,导致潜在问题。
  5. 【回答框架 5】如果委托返回 Task<T>,则 await 该任务并获取结果;若返回 Task,则直接 await 完成。
  6. 【关键点 1】异步匿名方法必须用 async 修饰且返回 Task 或 Task<T> 类型才能进行 await。
  7. 【关键点 2】使用 async lambda 表达式需将委托类型声明为 Func<Task> 或 Func<Task<T>>。
  8. 【关键点 3】async void 匿名方法只能用于事件处理器,且异常无法被捕获,需谨慎。
  9. 【关键点 4】捕获变量需注意其生命周期和修改问题,必要时使用局部副本。
  10. 【易错点 1】忘记将委托类型声明为 Func<Task> 导致不能使用 await。
  11. 【易错点 2】在异步匿名方法中直接捕获循环变量可能导致意外行为。
  12. 【易错点 3】使用 async void 时未处理异常可能导致程序崩溃。