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

时间:2018-01-25 14:15:09

标签: java-8 completable-future uncaughtexceptionhandler

用例

结果: 该例外从未被捕获,并且没有跟踪/记录它。在异步系统的情况下,1)是不合需要的,2)是发现硬问题和隐藏问题(如NPE,Runtime Exc等)的指标。

问题: 是否可以通过类比/以类似于java.lang。Thread.UncaughtExceptionHandler的方式实现 CompletableFuture.UncaughtExceptionHandler 机制?如果CompletableFuture链没有java.util.concurrent.CompletableFuture.UniExceptionally附加完成,那么想法是提供[default]未捕获的异常处理程序/完成。

1 个答案:

答案 0 :(得分:0)

简单的答案是:不。

但是,有人发布了一个丑陋的骇客代码,以在另一个线程中获得类似的行为: How to handle uncaught exceptions from CompletableFuture.runAsync

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