如何将未捕获的异常处理程序/完成附加到 CompletableFuture 链

ale*_*vov 5 java-8 uncaughtexceptionhandler completable-future

用例

结果:异常永远不会被捕获,并且没有跟踪/记录它。在异步系统的情况下,这是 1) 不可取的和 2) 要发现的硬和隐藏问题(例如 NPE、Runtime Exc 等)的指标。

问题:与java.lang类比/以类似方式实现CompletableFuture.UncaughtExceptionHandler机制是否可行。Thread.UncaughtExceptionHandler?如果 CompletableFuture 链没有附加 java.util.concurrent.CompletableFuture.UniExceptionally Completion,则提供 [默认] 未捕获的异常处理程序/完成。

小智 1

简单回答是不。

然而,有人发布了一个丑陋的黑客行为,以在另一个线程中获得类似的行为: 如何处理来自 CompletableFuture.runAsync 的未捕获的异常

我通过使用 ReactiveX ( http://reactivex.io )来逃避这个问题,但这种选择可能超出你的控制范围。在这种情况下,您可以考虑为 CompletableFuture 创建一个包装类,该类始终在幕后注册异常处理程序,因此您不必再显式调用Exceptionly(..)。但同样,这只是一种解决方法。