5

CompletableFutureAPI 相当吓人,有很多接受,然后和其他东西;很难说为什么存在不同的选择。

CompletableFuture<?> future = CompletableFuture.supplyAsync(() ->..., executor)

future.startNonBlocking...( (...) -> { callback behavior done when complete }

我基本上是在尝试模仿一个new Thread(() -> dostuff).start()但具有更好的线程池、错误处理等。注意:我实际上并不需要Runnable这里的接口,我正在生成一段现有的代码。

启动异步任务并在完成后执行行为的正确方法是什么?或处理抛出的异常?

4

2 回答 2

2

这是一个简单的异步回调:

CompletableFuture.supplyAsync(() -> [result]).thenAccept(result -> [action]);

或者,如果您需要错误处理:

CompletableFuture.supplyAsync(() -> [result]).whenComplete((result, exception) -> {
    if (exception != null) {
        // handle exception
    } else {
        // handle result
    }
});
于 2016-05-04T04:48:16.593 回答
2
new Thread(() -> dostuff).start()

表示dostuff实现Runnable,因此您可以使用

static CompletableFuture<Void> runAsync(Runnable runnable)    
static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)

还。

于 2016-05-04T07:07:02.420 回答