下面列出了java.util.concurrent.CompletableFuture#thenCombineAsync ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
public void thenCombineAsync() throws ExecutionException, InterruptedException {
CompletableFuture<String> completableFuture1 = CompletableFuture.supplyAsync(() -> "Future");
CompletableFuture<String> completableFuture2 = CompletableFuture.supplyAsync(() -> " is awesome!");
CompletableFuture<String> combinedCompletableFuture = completableFuture1.thenCombineAsync(completableFuture2, (s1, s2) -> s1.concat(s2));
assertThat(combinedCompletableFuture.get()).isEqualTo("Future is awesome!");
}
private static <R, M> CompletableFuture<R> computeModelAsync(CompletableFuture<M> loadModel,
BiFunction<CancelChecker, M, R> code) {
CompletableFuture<CancelChecker> start = new CompletableFuture<>();
CompletableFuture<R> result = start.thenCombineAsync(loadModel, code);
CancelChecker cancelIndicator = () -> {
if (result.isCancelled())
throw new CancellationException();
};
start.complete(cancelIndicator);
return result;
}
private CompletableFuture<CommandResultCode> submitPersistCommandAsync(final ApiPersistState apiCommand) {
final CompletableFuture<CommandResultCode> future1 = new CompletableFuture<>();
final CompletableFuture<CommandResultCode> future2 = new CompletableFuture<>();
publishPersistCmd(apiCommand, (seq1, seq2) -> {
promises.put(seq1, cmd -> future1.complete(cmd.resultCode));
promises.put(seq2, cmd -> future2.complete(cmd.resultCode));
});
return future1.thenCombineAsync(future2, CommandResultCode::mergeToFirstFailed);
}
public <T,U,V> CompletableFuture<V> thenCombine
(CompletableFuture<T> f,
CompletionStage<? extends U> g,
BiFunction<? super T,? super U,? extends V> a) {
return f.thenCombineAsync(g, a);
}
public <T,U,V> CompletableFuture<V> thenCombine
(CompletableFuture<T> f,
CompletionStage<? extends U> g,
BiFunction<? super T,? super U,? extends V> a) {
return f.thenCombineAsync(g, a, new ThreadExecutor());
}
public <T,U,V> CompletableFuture<V> thenCombine
(CompletableFuture<T> f,
CompletionStage<? extends U> g,
BiFunction<? super T,? super U,? extends V> a) {
return f.thenCombineAsync(g, a);
}
public <T,U,V> CompletableFuture<V> thenCombine
(CompletableFuture<T> f,
CompletionStage<? extends U> g,
BiFunction<? super T,? super U,? extends V> a) {
return f.thenCombineAsync(g, a, new ThreadExecutor());
}