我有2个CompletableFutures和3个方法,它们必须一个接一个地发生。 但是,在某些情况下,第二种方法不是必需的。
CompletableFuture<Boolean> cf1 = supplyASync.(() ->( doSomething1()));
CompletableFuture<Boolean> cf2 = new CompletableFuture<Boolean>();
if(someThing){
cf2 = cf1.thenApplyAsync(previousResult -> doSomething2());
}
else{
cf2 = cf1;
}
if (SomeThing2) {
cf2.thenApplyAsync(previousResult ->doSomeThing3());
}
Bassicly我要做的是doSomething2将在doSomething1(如果需要)之后运行,但无论如何doSomeThing3将在第一个或两个之后执行。
答案 0 :(得分:1)
代码正在按顺序执行,即第一个可完成的未来1,然后是未来2(如果适用),最后是任务3。
因此,您可以使用单个CompletableFuture:
CompletableFuture<Boolean> cf = CompletableFuture.supplyAsync(() -> {
if (doSomething1()) {
doSomething2();
}
doSomething3();
// return something
});
处理布尔结果将类似于:
CompletableFuture<Boolean> cf = CompletableFuture.supplyAsync(() -> {
boolean result;
if (result = doSomething1()) {
result = doSomething2();
}
return result && doSomething3();
});
// handle future as you need, e.g. cf.get() to wait the future to end (after task 3)