6

用例

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

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

4

1 回答 1

0

简单回答是不。

但是,有人发布了一个丑陋的 hack,以在另一个线程中获得类似的行为: 如何处理 CompletableFuture.runAsync 中的未捕获异常

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

于 2020-07-01T19:59:44.117 回答