我正在使用 GPars 的 fork/join。当我在调用 forkOffChild 后抛出异常时,它会被掩埋。
例如:
def myRecursiveClosure = { boolean top ->
try {
if (!top) {
throw new RuntimeException('child had a problem')
} else {
forkOffChild(false)
}
} catch (Exception exc) {
println 'Exception handled internally'
throw exc
}
}
try {
GParsPool.withPool {
GParsPool.runForkJoin(true, myRecursiveClosure)
}
} catch (Exception exc) {
println 'Exception handled externally'
throw exc
}
在这里,我设置了一个标志,因此我知道闭包已被递归调用。然后,我抛出一个异常,它被“内部”捕获,但重新抛出从未被“外部”捕获。所以我不知道分叉的孩子失败了。
我也尝试了异常处理程序,但它似乎也没有被调用。
这是预期的行为,还是我做错了什么?有什么策略可以帮助解决这个问题吗?我不能让孩子默默地失败。
谢谢!