c# - 实现并行异常以获得错误树?

标签 c# java c++ error-handling

考虑以下代码:

// this method should add numbers, the requirements are:
// x >= 3 and y <= 5
int add(int x, int y)
{
  if(x < 3) throw new ...;
  if(y > 5) throw new ...;
}

这绝对是传统方法,但如果您为 x 和 y 传递了无效值,您只会得到 x 的异常。为什么是 x 而不是 y?只是因为您首先检查 x,然后才检查 y。为什么?这基本上是主要问题。

在上面的代码中,在 y 之前检查 x 或在 x 之前检查 y 是完全没有意义的。仅仅因为在单个线程中执行流程的想法,一些语句先于其他语句执行。

我正在考虑实现一种机制来处理并行异常。这个想法是,如果有 2 个语句可以同时执行(执行顺序无关紧要)并且它们都抛出异常,我希望能够处理所有这些异常。伪代码如下:

// this method should add numbers, the requirements are:
// x >= 3 and y <= 5
int add(int x, int y)
{
  parallel
  {
    if(x < 3) throw new ...;
    if(y > 5) throw new ...;
  } // point A

  return x + y;
}

在 A 点的某处抛出累积异常。您以前见过这种方法,或者甚至可能实现过类似的方法吗?这里的主要目标是,如果你有一个复杂的操作,它使用了一些其他操作,并且“最上面的”操作由于某种原因失败了,你就能够得到错误的完整诊断:不是一个错误(或一些嵌套的错误),而是错误的

问题是:

  1. 你怎么看?
  2. 你以前见过吗?
  3. 您是否尝试过实现类似的东西?

最佳答案

也许使用 AggregateException

关于c# - 实现并行异常以获得错误树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017010/

相关文章:

c# - 如何在 UWP 应用程序中播放 .mp3(或其他)文件?

c# - WebRequest 从 Uri 中删除片段

java.io.FileNotFoundException 访问被拒绝

c++ - 按值存储 C++ 映射

c# - Northwind Access 数据库的订单对象

c# - avcodec_decode_video2 中的 FFmpeg 内存增长

java - 如何正确实例化一个可以同时容纳玩家和庄家的数组列表?

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

c++ - 如何在 docker 中使用静态 opencv 库编译 C++ 应用程序

c++ - boost::interprocess 互斥与 boost 线程互斥