考虑以下代码:
// 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 点的某处抛出累积异常。您以前见过这种方法,或者甚至可能实现过类似的方法吗?这里的主要目标是,如果你有一个复杂的操作,它使用了一些其他操作,并且“最上面的”操作由于某种原因失败了,你就能够得到错误的完整诊断:不是一个错误(或一些嵌套的错误),而是错误的树。
问题是:
- 你怎么看?
- 你以前见过吗?
- 您是否尝试过实现类似的东西?
最佳答案
也许使用 AggregateException ?
关于c# - 实现并行异常以获得错误树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017010/