如何处理Task.Factory.StartNew异常?

2024-02-02

我这里有一些奇怪的问题。任务抛出的异常始终没有独立处理,我该如何尝试处理它。

我试试这个:

http://msdn.microsoft.com/en-us/library/dd997415%28v=vs.110%29.aspx http://msdn.microsoft.com/en-us/library/dd997415%28v=vs.110%29.aspx

private class MyCustomException : Exception
{
     public MyCustomException(String message) : base(message)
     {
     }
}

public static void Main()
{
   var task1 = Task.Factory.StartNew(() =>
   {

      throw new MyCustomException("I'm bad, but not too bad!");
   });

   try
   {
      task1.Wait();
   }
   catch (AggregateException ae)
   {
       // Assume we know what's going on with this particular exception. 
       // Rethrow anything else. AggregateException.Handle provides 
       // another way to express this. See later example. 
       foreach (var e in ae.InnerExceptions)
       {
           if (e is MyCustomException)
           {
               Console.WriteLine(e.Message);
           }
           else
           {
               throw;
           }
       }

    }
    Console.Read();
}

this:

http://dotnetcodr.com/2014/02/11/exception-handling-in-the-net-task-parallel-library-with-c-the-basics/ http://dotnetcodr.com/2014/02/11/exception-handling-in-the-net-task-parallel-library-with-c-the-basics/

this:

http://blogs.msdn.com/b/pfxteam/archive/2010/08/06/10046819.aspx http://blogs.msdn.com/b/pfxteam/archive/2010/08/06/10046819.aspx

this:

var task = Task.Factory.StartNew(() => this.InitializeViewModel(myViewModel));
task.ContinueWith(o => MyErrorHandler(task.Exception), TaskContinuationOptions.OnlyOnFaulted);

并在 StackOverflow 上查看许多其他类似的问题。但它总是一样的 - 异常不被处理。这些原始代码片段没有处理它!我觉得这里有某种魔力...... 我从事 .Net Framework 4.0 工作

同时,处理对我有用的异常的单一方法是:

        Task.Factory.StartNew(() =>
        {
            try
            {
                //do something that thrown exception
            }
            catch (Exception)
            {

            }
        });

如果您在 Visual Studio 中运行该示例代码,您确实会收到消息MyCustomException was unhandled by user codeVisual Studio 将打破这一界限。

这并不意味着你的例外是really未处理的。这只是意味着,默认情况下,Visual Studio 会因未处理的异常而中断inside任务。您可以通过运行应用程序而不进行调试(Ctrl-F5)来验证这一点;您会注意到您的异常已按预期得到处理。

这个问题在下面的SO问题中有更详细的描述:

  • 阻止 Visual Studio 中断任务中的异常 https://stackoverflow.com/q/16921984/87698
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理Task.Factory.StartNew异常? 的相关文章

随机推荐

  • Django 迁移和可定制的可重用应用程序

    大约三周前 我开始编写我的第一个可重用应用程序 但我在处理迁移方面遇到了麻烦 我希望我的应用程序的某些点是可定制的 因此我有一个conf子模块 https github com Aladom django mailing blob 6260
  • 如何回显 DOMNodeList 对象和 DOMElement 对象?

    我正在使用循环来填充名为 list 的数组 它就像一个魅力 content is a DOMNodeList Object value is a DOMElement Object list array foreach content as
  • 导入 io.restassured.RestAssured 无法解析

    您好 我在使用放心 4 1 1 时无法解决该错误 我的 Eclipse IDE 中的库 我已在 pom xml 文件中添加了放心库 但错误仍未解决 我尝试重新导入放心的库https mvnrepository com artifact io
  • 使用 GNU gfortran 字符串化宏

    如何使用 GNU gfortran 字符串化预处理器宏 我想将宏定义传递给 GNU gfortran 然后将其用作代码中的字符串 实际上我想这样做 program test implicit none character len alloc
  • 在 Java 中如何检查 Socket 当前是否已连接? [复制]

    这个问题在这里已经有答案了 我试图找出 Java TCP 套接字是否是现在已连接 以下内容似乎只是告诉我套接字是否已在某个时刻连接 而不是当前是否仍处于连接状态 socket isConnected 任何帮助表示赞赏 谢谢 假设您对协议有一
  • 使用 Java 8 将 int 数组转换为 long 数组?

    我尝试了几种方法都没有成功 this tileUpdateTimes is long and other tileUpdateTimes is int this tileUpdateTimes Arrays stream other til
  • gem 原生扩展到底是什么?

    我觉得本机扩展就像库一样 您应该在尝试安装这些依赖于本机扩展的 gem 之前将其安装到系统上 像ImageMagic图书馆 那是对的吗 关于本机扩展 我们还应该了解什么吗 gem 本机扩展might链接到需要预安装的单独库 以及RMagic
  • MongoDB C# 驱动程序:查询拦截器?

    MongoDB C 驱动程序是否支持像实体框架这样的查询拦截器 我检查了文档但找不到任何内容 基本上我需要做的是确保对数据库的某些查询 根据上下文 始终应用某些限制 例如 如果我的文档可以被软删除 那么我总是需要确保为 Soft Delet
  • 动态设置每个记录器实例的 Nlog 日志级别 ASP.Net Core 2.x

    客观的 动态选择我想要详细日志记录的 HTTP 请求 不同的日志级别 Overview 我有一个正在运行的 ASP Net core 2 1 Web 服务器 一旦投入生产 如果我需要调试问题 我希望能够更改日志级别 我已经找到了如何全局更改
  • 使用 urllib2 进行代理

    我打开网址 site urllib2 urlopen http google com 我想做的是用代理以相同的方式连接 我有一个地方告诉我 site urllib2 urlopen http google com proxies http
  • Videomixer 在源上失败,而不是在 Videotestsrc 上失败

    我想在一个视频文件中同时播放两个不同的本地视频文件 窗户 下面的代码在没有解复用器和解码器的情况下工作正常 static void play video GMainLoop loop GstElement pipeline videomix
  • 如何检查方法是否始终返回值

    我写了一个编译器 它已经可以正常工作了 它检查所有非 void 方法是否至少有一个 return 语句 但它不检查非 void 方法中的所有代码路径是否都返回一个值 因此 例如 如果我有以下代码 int function bool a if
  • 使用 ObserveOnDispatcher 进行单元测试

    我的视图模型中有一些代码如下 miService GetSomething par1 par2 ObserveOnDispatcher Subscribe dt gt DoSomething dt 然后在我的测试中 我 嘲笑 我的服务如下
  • 如何在离线模式下使用 SBT 进行构建

    相当于什么mvn o在SBT 当我检查我的 ivy 存储库时 我可以看到依赖项 jarcache groupId artifactId jars 当我尝试在没有互联网连接的情况下构建它时 它仍然会这样做Resolving 事情并显示未解决的
  • Windows 上的端口 getrlimits/setrlimit

    我正在寻找一种在 Windows 上移植 POSIX getrlimits setrlimit 功能的方法 我们的应用程序有时会遇到非常深的递归 并且达到默认堆栈限制 导致堆栈溢出 为了防止这种情况 我们编写了以下代码 struct rli
  • 如何获取文件的正确文件创建日期?

    我不需要上次修改时间 也不需要上次文件访问时间 而是文件创建时间 我还没有找到这方面的信息 也许一些库 Path p Paths get f getAbsoluteFile toURI BasicFileAttributes view nu
  • mysql 5.1.49 中子查询内 LIMIT 的替代方案

    SELECT student id FROM students AS s1 WHERE student id IN SELECT s2 student id FROM students AS s2 WHERE s1 year of birt
  • 如何使用 C# 代码在 MySql 数据库中插入日期时间

    2 1 2009 5 04 15 AM 我从 MySQL 数据库获取它 并希望将它从我获取它的其他地方的表中提供 但它在 C 中不起作用 但使用 gui 却可以 我如何使用 C 代码将此日期输入 MySQL 数据库 如果您与MySqlCom
  • 如何使用 facebook API 获取过去的新闻源?

    获取新闻源的 API 是 https graph facebook com me home access token https graph facebook com me home access token 限制 1000 直到 它返回带
  • 如何处理Task.Factory.StartNew异常?

    我这里有一些奇怪的问题 任务抛出的异常始终没有独立处理 我该如何尝试处理它 我试试这个 http msdn microsoft com en us library dd997415 28v vs 110 29 aspx http msdn