C产品如何满足特定用户需求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1014个文字,预计阅读时间需要5分钟。
直接捕获`AggregateException`而不展开,等同于没有处理——它只是一个异常容器,真正的问题隐藏在`InnerExceptions`中。
为什么不能只 catch (AggregateException ex) 就完事
因为 AggregateException 本身不表示具体错误类型,它只是多个异常的“打包盒”。你看到的 ex.Message 通常是 “One or more errors occurred.” 这种无意义提示;ex.InnerException 只返回第一个子异常,其余全被忽略。更危险的是:如果里面混着 OperationCanceledException 和 SqlException,不展开就无法区分是用户点了取消按钮,还是数据库连不上。
必须调用 ex.Flatten(),否则嵌套可能很深(比如 Task.Run(() => Task.Run(() => throw new Exception())) 会生成两层 AggregateException)。
本文共计1014个文字,预计阅读时间需要5分钟。
直接捕获`AggregateException`而不展开,等同于没有处理——它只是一个异常容器,真正的问题隐藏在`InnerExceptions`中。
为什么不能只 catch (AggregateException ex) 就完事
因为 AggregateException 本身不表示具体错误类型,它只是多个异常的“打包盒”。你看到的 ex.Message 通常是 “One or more errors occurred.” 这种无意义提示;ex.InnerException 只返回第一个子异常,其余全被忽略。更危险的是:如果里面混着 OperationCanceledException 和 SqlException,不展开就无法区分是用户点了取消按钮,还是数据库连不上。
必须调用 ex.Flatten(),否则嵌套可能很深(比如 Task.Run(() => Task.Run(() => throw new Exception())) 会生成两层 AggregateException)。

