GParsのフォーク/ジョインを使用しています。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
}
ここでは、フラグを設定して、クロージャが再帰的に呼び出されていることを確認します。次に、「内部的に」キャッチされる例外をスローしますが、再スローは「外部的に」キャッチされることはありません。だから私は二股に分かれた子供が失敗したことに気づいていません。
例外ハンドラも試しましたが、呼び出されないようです。
これは予想される動作ですか、それとも私は何か間違ったことをしていますか?これを支援する戦略はありますか?私は子供を黙って失敗させることはできません。
ありがとう!