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

请解释在 C# 应用程序中,处理未捕获异常的方法有哪些,并说明如何实现全局异常处理?

编码实现技术原理问题排查ASP.NET CoreC#

考察说明

考查候选人对 C# 异常处理机制的理解,以及在实际开发中如何全局捕获未处理异常。

回答思路

  1. 【回答框架 1】在 C# 中,未处理异常通常会导致程序终止。捕获它们需要在多个层级设置全局处理钩子。对于桌面应用(如 WinForms、WPF),可以订阅 AppDomain.CurrentDomain.UnhandledException 事件,该事件在所有未被捕获的异常发生时触发,但不会阻止程序崩溃。
  2. 【回答框架 2】对于 ASP.NET Core 或 ASP.NET 应用,可以使用中间件(如 UseExceptionHandler)或实现 IExceptionHandler 来捕获未处理异常,并返回合适的错误响应。
  3. 【回答框架 3】对于 .NET Core 控制台应用,可以订阅 AppDomain.CurrentDomain.UnhandledException 事件,或者在 Program.Main 中使用 try-catch 包裹整个逻辑。
  4. 【回答框架 4】此外,还可以使用 TaskScheduler.UnobservedTaskException 来捕获在任务(Task)中未观察到的异常,防止其被静默忽略。
  5. 【关键点 1】全局异常处理需要区分 UI 线程、非 UI 线程和异步任务。
  6. 【关键点 2】AppDomain.CurrentDomain.UnhandledException 可以捕获大多数未处理异常,但并不能阻止进程终止。
  7. 【关键点 3】使用中间件或框架提供的异常处理机制可以更好地控制对客户端的响应。
  8. 【易错点 1】单纯依赖全局事件不能保证程序可恢复,需结合日志记录和必要清理。
  9. 【易错点 2】TaskScheduler.UnobservedTaskException 在 .NET 4.5 后行为有所变化,需注意。
  10. 【易错点 3】捕获未处理异常并不能替代代码中的适当 try-catch 结构。