CompletableFuture如何先返回FALSE或等到全部完成后再返回TRUE

我有点奇怪的情况,似乎不允许这种钉子固定在任何已广泛建立的CompletableFuture孔中。

  • 在评估返回的布尔值的主要方法中,我想允许对三种不同方法的调用以异步方式完成。这三种方法都可以返回TRUE或FALSE。
  • 如果 any 返回FALSE,我希望评估结果除去其余部分,然后简单地返回该FALSE值。关键是,它可以是三个中的任何,不一定是第一个。
  • 但最重要的是,我需要评估,直到所有三个返回TRUE,然后才真正返回TRUE。这是至关重要的。

现在,我正在使用基本的&&链进行评估:

public boolean evaluateChecks() {
    return checkOne().Join() && checkTwo().Join() && checkThree().Join();
}

尽管如此,它仍然按照特定的顺序执行操作-如果checkThree()是第一个返回FALSE值的对象,它仍然必须等到前两个提供了它们的值之后才能进行评估,这是因为&&完全有效。

现在,所有这三种方法都返回CompletableFuture<Boolean>,但我可以毫不费力地将它们还原回普通方法,以便在评估它们的主要方法中运行CompletableFuture

我看过quite a few examples,但似乎没有一个能为我提供所需的功能。

junjun8142 回答:CompletableFuture如何先返回FALSE或等到全部完成后再返回TRUE

改编自Didier L的回答:

使用exceptionallycompleteExceptionally返回的thenAccept complete来代替CompletableFutureallOf()

例如,保存期货,因为您要对它们进行连锁操作:

CompletableFuture<Boolean> a = checkOne(),b = checkTwo(),c = checkThree();

使用CompletableFuture.allOf等待它们全部完成(大概您不希望失败/异常)并将Void的结果转换为{{1 }}。

Boolean

有了上面返回的true,如果任何原始期货以CompletableFuture<Boolean> allWithFailFast = CompletableFuture.allOf(a,b,c).thenApply(__ -> a.join() && b.join() && c.join()); // if there is an exception,it'll be propagated to the future returned by thenApply 完成,您现在可以CompletableFuture更快。

complete

根据完成顺序及其结果,false期货将首先完成并评估期货,或者其中一个期货将返回Stream.of(a,c).forEach(f -> f.thenAccept(result -> { if (!result) { allWithFailFast.complete(false); } })); 并导致{{1} }以allOf完成。

如果多个期货都以false完成,则只有第一个呼叫

allWithFailFast

会做任何事情,其他的基本上都会被忽略。

本文链接:https://www.f2er.com/3049081.html

大家都在问