如何避免将CompletableFuture中的异常包装到CompletionException中?

时间:2019-10-27 19:54:12

标签: java asynchronous future completable-future

我尝试使用CompletableFuture运行一些任务,并根据whenComplete中的原因进行不同的处理。

但是取决于我如何“启动”异常(通过将异常从线程中抛出或通过completeExceptionally传递),异常可以包裹在CompletionException中。

情况1-包裹了异常:

    @Test
    void throwsWrappedException () {
        final CompletableFuture<Object> objectCompletableFuture = new CompletableFuture<>();
        final CompletableFuture<Object> modified = objectCompletableFuture
            .whenComplete((message, cause) -> {
                throw new AcceptPendingException();
            });
        modified
            .whenComplete((message, cause) -> System.out.println(cause));

        objectCompletableFuture.complete(null);
    }

情况2-异常不会被包裹:

    @Test
    void throwsOriginalException() {
        final CompletableFuture<Object> objectCompletableFuture = new CompletableFuture<>();
        objectCompletableFuture
            .whenComplete((message, cause) -> System.out.println(cause));

        objectCompletableFuture.completeExceptionally(new AcceptPendingException());
    }

是否已记录此行为,并且可以在运行中的线程中发出异常完成信号而无需包装此异常?

0 个答案:

没有答案