异步任务中的异常在 Visual Studio 中被拦截

2024-04-13

我想运行多个任务,其中一些任务可以完成异步,然后等待所有任务完成。由于任务可能会引发异常,因此我想捕获并记录它们。 sample code for that:

static async Task doit(int x)
{
    try
    {
        Console.WriteLine("{0}  {1}  start", x, Thread.CurrentThread.ManagedThreadId);
        await Task.Run(() =>
        {
            Thread.Sleep(TimeSpan.FromSeconds(2 + x));  // simulate long-running stuff worth awaiting...
            if (x == 3)
            {
                throw new Exception("Exception inside task " + x.ToString());  // Simulate the async task throwing exception
            }
        });

        if (x == 2)
        {
            throw new Exception("Exception after task " + x.ToString());  // Simulate post-async task throwing exception
        }

        Console.WriteLine("{0}  {1}  end", x, Thread.CurrentThread.ManagedThreadId);
    }
    catch (Exception ex)
    {
        Console.WriteLine("{0}  {1}  Exception: {2}", x, Thread.CurrentThread.ManagedThreadId, ex.Message);
    }
}

private static void TestTasks()
{
    var tasks = Enumerable.Range(1, 3).Select(n => doit(n)).ToArray();
    Console.WriteLine("Waiting");
    Task.WaitAll(tasks);
    Console.WriteLine("all end");
}

如果我从控制台运行此代码,它将按预期工作,并输出以下内容:

1  1  start
2  1  start
3  1  start
Waiting
1  3  end
2  4  Exception: Exception after task 2
3  5  Exception: Exception inside task 3
all end

但是,如果我在 Visual Studio 中进行调试,调试器会在注意到的异常处停止Exception was unhandled by user code。那我需要打F5 Continue以便代码完成。

我注意到,如果我禁用选项=>调试器=>Enable Just My Code,调试器不会停止。但是,我不想永久设置它,因为我使用的一些框架处理我的异常do希望调试器停止。

  • 为什么即使异常位于 try/catch 内,调试器也会停止?
  • 如何让调试器不因该异常而停止?

为什么即使异常位于 try/catch 内,调试器也会停止?

从技术上讲,代码抛出了一个未被任何捕获的异常your当前调用堆栈上的代码。它被(编译器生成的)捕获async状态机并放置在返回的任务上。后来,当任务从Task.Run is awaited,这个例外是rethrown.

如何让调试器不因该异常而停止?

现在,您唯一的选择是让调试器以某种方式忽略此异常(仅禁用我的代码,禁用对该类型的用户未处理的异常的中断,...)。

如果您认为 VS 应该在这里提供更好的用户体验,请随时打开用户声音建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异步任务中的异常在 Visual Studio 中被拦截 的相关文章

随机推荐

  • 如何让应用程序支持三星的弹出视图? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的应用程序的用户抱怨他无法在弹出窗口中打开应用程序 像这样 http www samsung com
  • 如何增加 Visual Studio 项目的内部版本号?

    为什么在 Visual Studio 中构建项目不会增加内部版本号 我在 AssemblyInfo cs 中有这个 assembly AssemblyVersion 1 5 这在 frmAbout 的构造函数中 Version versio
  • DataTable:如何隐藏分页并仅在需要时显示?

    我有 2 个使用 DataTable jQuery 插件的表 我想知道是否有办法隐藏表格右下角的分页 Note 仅在需要时才显示分页 当查询结果小于10条时隐藏分页 Use 绘制回调 https datatables net referen
  • 在facet_wrap中自动包装长窗格标题[重复]

    这个问题在这里已经有答案了 我想使用facet wrap 总结几列 我想给几个方面窗格起长标题 例如 set seed 123 df lt data frame a sample 0 1 20 replace T b sample 1 4
  • Net Core中DbContext需要MemoryCache或者Redis吗?

    我们在 SQL Server 数据库中有多个查找表 表格用于应用程序下拉菜单 地址类型 Home Business 产品类别 Books Food 电子产品 团队希望应用而不是不断读取数据库查找表MemoryCache or Redis C
  • 如何在 Laravel 中设置动态路由前缀?

    我需要创建一个具有多个区域设置的应用程序 每个路由都以区域设置为前缀 例如 xxx com en home xxx com fr home 问题是 我需要将区域设置字符串动态绑定到路由前缀 由于用户可以更改区域设置 因此区域设置字符串存储在
  • 在 Swift 中改变函数参数

    在 Swift 中 是否有可能在该函数的作用域内改变作为参数传递给函数的变量所指向的值 func exampleFunction value String index Int gt Bool value Changed Value Erro
  • Angular 4使用反应形式在数组内创建动态formArray

    在这里 我们在数组内动态创建数组 下面是预期结果的示例结构 optionsRadios null Package Title null HotelData Htitle HDescription hotelStar RoomData Hot
  • 通过 Excel VBA 发送带附件的电子邮件

    我想通过 Outlook 从 Excel 通过电子邮件发送报告 我正在使用我自己和同事的电子邮件地址对此进行测试 我收到 无法送达 的消息Error 该消息表示无法联系到收件人 并建议稍后尝试发送电子邮件 Sub CreateEmail D
  • 将 std::string 传递给函数 f(**char)

    是否可以将 std string 的指针传递给需要 char 的函数 该函数需要一个 char 才能向其写入值 目前我正在做以下事情 char s1 f s1 std string s2 s1 难道就没有更短的路吗 很明显 s2 c str
  • org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到身份验证对象

    我在以下环境中有一个网络应用程序 春季3 2 2 春季安全3 2 0 JPA 2 0 JSF 2 1 9 我已将以下与 Spring 安全相关的库添加到类路径中 spring security core 3 2 0 M1 jar sprin
  • 如何找到只安装了facebook应用的好友? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在 Facebook 上使用一个应用程序 我想找出仅包含在 Facebook 上安装相同应用程序的朋友的列表 而不是整个朋友列表 我正在
  • 嵌套字典理解python

    我无法理解 Python 3 中的嵌套字典推导式 我从下面的示例中得到的结果输出了正确的结构 没有错误 但只包含内部键 值对之一 我还没有找到像这样的嵌套字典理解的例子 谷歌搜索 嵌套字典理解 python 显示遗留示例 非嵌套理解或使用不
  • 如何长按主页、后退或最近使用的应用程序按钮打开我的 Android 应用程序?

    我希望我的用户能够通过长按后退按钮 最近使用的应用程序按钮或主页按钮来启动我的应用程序 或者甚至长按音量增大 减小或电源按钮 这将允许用户在不触摸屏幕图标的情况下执行我的应用程序 顺便说一句 我提供了与 Google Now 类似的语音解决
  • 将值从一个 jsp 页面传递到另一个 jsp 页面

    我正在将值从数据库检索到 jsp 中的表 到列 我想将该值插入到数据库中的另一个表中 为此 我使用另一个 jsp 表将该值插入到数据库中 并在之前的 jsp 页面表单操作选项卡中调用该 jsp 页面 I use request getPar
  • 时间:2019-03-14 标签:c++

    我正在编写一个 C 应用程序 我有一个类变量 多个线程正在写入该变量 在 C 中 任何可以在编译器 意识到 正在更改的情况下进行修改的内容都需要标记为易失性 对吧 因此 如果我的代码是多线程的 并且一个线程可能写入 var 而另一个线程从中
  • Swift 的标准库和名称冲突

    我知道 Swift 不使用命名空间 但名称是在每个模块中定义的 首先 我不太明白这是如何避免名称冲突的 请随意详细说明 尽管如此 我的主要问题是 假设我想要一个不使用 NSTreeNode 的树结构 所以我创建了自己的类 名为 TreeNo
  • Op 类型未在二进制中注册“SentencepieceEncodeSparse”

    我部署了一个模型 该模型使用 tfhub 模型来使用 docker 进行张量流服务 这是我的模型中包含的 tfhub 模型 https tfhub dev google universal sentence encoder multilin
  • DropboxAPI 入门,未找到类

    我第一次尝试使用 Dropbox API 但在启动应用程序时遇到此错误 Caused by java lang NoClassDefFoundError com dropbox client2 session Session AccessT
  • 异步任务中的异常在 Visual Studio 中被拦截

    我想运行多个任务 其中一些任务可以完成异步 然后等待所有任务完成 由于任务可能会引发异常 因此我想捕获并记录它们 sample code for that static async Task doit int x try Console W