You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用await Task.Run仍触发User-Unhandled异常?如何解决?

关于await Task.Run异常捕获的问题解决

问题原因

Visual Studio调试器默认会在异常抛出时就中断执行,哪怕这个异常后续会被try/catch捕获。这不是真的“未处理异常”,只是调试器的默认行为导致的中断提示。

解决步骤

调整调试器异常设置

  1. 打开异常设置面板:通过菜单栏「调试」→「Windows」→「异常设置」,或按下快捷键Ctrl+Alt+E。
  2. 在面板中找到「公共语言运行时异常」:
    • 如果不想让调试器在任何异常抛出时中断,取消勾选该分类下的「抛出」选项;
    • 更合理的做法是保持「抛出」勾选,此时调试器只会在异常未被代码捕获时才中断,被try/catch处理的异常只会在输出窗口记录,不会打断调试流程。

确保代码正确使用await

必须保证你确实await了Task.Run返回的任务,否则任务内部的异常会成为未观察到的异常,触发调试器的未处理异常提示。正确示例:

async Task ExecuteTaskWithCatch()
{
    try
    {
        await Task.Run(() =>
        {
            // 模拟抛出异常
            throw new ArgumentException("Task内部异常");
        });
    }
    catch (ArgumentException ex)
    {
        // 成功捕获异常
        Console.WriteLine($"捕获到异常:{ex.Message}");
    }
}

如果省略await,比如直接写Task.Run(...),任务的异常不会被传播到当前try/catch块,就会被调试器判定为未处理异常。

内容的提问来源于stack exchange,提问作者Pablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:33:15