问题标签 [completable-future]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3172 浏览

java - java多嵌套CompletionStage相当于“flatMap”?

因此,考虑到我有以下示例:

我的问题是整个CompletionStage<CompletionStage<CompletionStage<CompletionStage<Boolean>>>>多嵌套的未来类型。是否可以CompletionStage<Boolean>通过使用 Scala 之类的东西来减少它,flatMap还是有另一种方法可以做到这一点?

0 投票
1 回答
1561 浏览

java - 扩展 CompletableFuture 时类型不匹配

我正在尝试扩展CompletableFuturethenComposeafter handle,但出现编译器错误:

这是我的代码:

作为记录,我试图隐藏这个响应thenCompose中使用的基本上是:

0 投票
1 回答
2408 浏览

java - JavaEE 应用服务器中的 CompletableFuture/parallelStream

鉴于新的 Java8,我们正在为异步任务获得非常好的特性,例如 CompletableFuture 和 .paralellStream()。如果您按照我的理解在 Java SE 中运行它,您将使用 ForkJoinPool,但是如果我在例如 Wildfly 或 TomcatEE 中运行以下示例会发生什么?

会发生什么,如果我会从哪里借用我的资源

  1. 这些示例在 @Stateful bean 中运行
  2. 这些示例在 @Stateless bean 中运行
  3. 这些示例在 CDI bean 中运行
0 投票
3 回答
18448 浏览

java-8 - 仅在满足条件时链接多个 CompletionStage

我有几种CompletionStage我想链接的方法。问题是第一个的结果将决定是否应该执行下一个。现在,实现这一点的唯一方法似乎是将“特殊”参数传递给 next CompletionStage,因此它不会执行完整的代码。例如:

由于整个代码取决于第一个someCondition(如果是,false那么结果将是RESULT_1,如果不是,那么应该执行整个代码)这个结构对我来说有点难看。有什么方法可以决定是否应该执行2nd ( thenCompose(...)) 和 3rd ( ) 方法?thenApply(...)

0 投票
1 回答
4800 浏览

java - 如果在 runAsync 调用之后进行链接,thenRunAsync(与 thenRun 相对)是否有任何区别?

在下面的代码中,调用thenRunAsync有什么不同吗?我应该只调用thenRun吗?

针对评论进行详细说明:如果我要改用此代码,

它的行为会有什么不同吗?

在这两种情况下,行为都是非阻塞的,并且第二个任务在第一个任务完成之前不会运行,据我所知,无论如何。

0 投票
1 回答
4337 浏览

java - 如何在 CompletableFuture.supplyAsync(供应商供应商)方法中使用所需数量的工作线程设置 ForkJoinPool?

0 投票
2 回答
3994 浏览

java - 在 java 中,我如何处理 CompletableFutures 并获得第一个完成的理想结果?

通常使用 CompletableFuture 我会在结果可用后立即调用 thenApply 或其他一些方法来执行某些操作。但是,我现在有一种情况,我想处理结果,直到收到肯定的结果,然后忽略所有进一步的结果。

如果我只想获取第一个可用结果,我可以使用 CompletableFuture.anyOf (尽管我讨厌将列表转换为数组只是为了调用 anyOf)。但这不是我想要的。我想获得第一个结果,如果它没有理想的结果,那么我想处理第二个可用的结果,依此类推,直到我得到理想的结果。

这是一个简单的示例,它遍历所有结果并返回它找到的第一个大于 9 的值。(请注意,这不是我真正的任务。这只是一个简单的示例。)

当然,该示例从一开始就检查结果,而不是在完成时查看结果。所以这是一个完成我想要的东西,但代码更复杂的一个。

有没有我可以做到这一点的api?

甚至更好:

0 投票
0 回答
740 浏览

java - 如何在使用 CompletableFuture.get() 时捕获 CompletableFuture.completeExceptionally() 抛出的异常?

如何在使用 CompletableFuture.get() 时捕获 CompletableFuture.completeExceptionally() 抛出的异常?

这是一些代码

这是非常丑陋的。同样,我只想用尽可能少的代码行并以最简洁的方式捕获 MyException。不确定 isCompletedExceptionally() 是否异常,join() 可以帮助以最简单的方式捕获 MyException。如果有怎么办?

0 投票
1 回答
1440 浏览

java-8 - Java 8 CompletableFuture.thenApply()

最后在 Java 8 中使用 CompletableFuture dealio。我遇到了一个我不太理解的编译错误(在我的 IDE 中)。

我有一个List<String>要附加到 URL 的标识符,然后异步调用每个 url。到目前为止,我只有这几种方法。

我得到的编译器错误出现this::sendRequest在第一种方法中。它抱怨我的班级没有定义sendRequest(Object)方法。

但是我想通过输入identifiers我不需要担心在我的 lambda 表示法中调用类型?我什至不确定如何使用::运算符指定类型。也许我什至不应该使用::运营商?我很困惑。

0 投票
1 回答
5523 浏览

lambda - 使用 CompletionStage 返回结果

我是玩框架和Java8的新手。我正在尝试在 Play 中编写一个简单的 Web 服务,它符合异步模型并允许 Web 服务调用快速返回,从而为异步线程留下繁重的工作。

我有一个非常基本的操作

调用中的真正处理必须从数据库中加载人员数据。db方法是

dbMethod 本身是异步的并返回 CompletionStage>。

所以我的问题是我无法理解如何最好地对 Web 服务进行编程以使该方法不会阻塞。

我可以在我的处理程序中做这样的事情

问题在于控制器在“get”方法处阻塞,并且它抛出除了使用标准 try-catch 块(这也使其非异步)之外我不知道如何处理的异常。

我也尝试过这样的事情

但这会产生编译错误。

我将非常感谢这里的一些帮助;因为我对 Java 异步编程非常陌生,尽管阅读了很多教程,但我不清楚如何最好地使用这些教程。

谢谢你们。