问题标签 [completion-stage]

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 投票
2 回答
1482 浏览

java - (Datastax 4.1.0)(Cassandra)如何使用 session.executeAsync 收集所有响应?

我想在 manuel 中使用 execute.Async 调用对 cassandra db 进行异步调用我找到了这段代码,但我不明白如何将所有行收集到任何列表中。像 Select * from table 这样的基本调用,我想存储所有结果。

https://docs.datastax.com/en/developer/java-driver/4.4/manual/core/async/

0 投票
1 回答
41 浏览

java - 在 CompletableFuture 上同步使用 acceptEither 进行任务调度

我正在通过 CompletableFuture API 学习并发性。假设我有两个任务:一个需要 250 毫秒,另一个需要 2500 毫秒。在以下代码中:

我得到以下结果:

我知道代码是同步运行的,因为正在使用相同的公共分叉连接池线程并且我们没有指定线程。我对为什么fetchUsers2先执行任务然后执行任务感到困惑fetchUsers1(这似乎与每次运行一致)。我假设由于在代码thenCompose中首先调用fetchUsers1它,所以它会首先“排队”。

0 投票
1 回答
386 浏览

java - 同时运行 Void CompletionStage 但忽略结果

我有两个 completionStages 方法调用,如果不满足条件,每个调用一个远程服务。它们都是运行时间很长的进程,我们需要减少延迟。我也不关心 secondFuture 的回应。它可能会返回CompletionStage<Void>,因为我只关心该方法是否在我们退出主方法之前运行。一个额外的复杂性是,它injectedClass2.serviceCall还会引发一个非常重要的异常(404 StatusRuntimeException),需要将其呈现给客户端。

如何确保第一个和第二个未来异步运行(不相互依赖),同时第二个未来为客户端显示其错误代码和异常。

下面的主要方法是我最好的尝试。它可以工作,但我希望学习一个更好的实现,它可以利用 Completables/streams 等。

也许超出范围,如何测试/检查两个完成阶段是否同时运行?

编辑:CompletableFutures.combine()是第三方库方法,不是 java.util.concurrent 包的一部分。

0 投票
0 回答
119 浏览

java-8 - CompletionStage 和异常处理

我一直在尝试了解在使用 CompletionStage 时如何正确处理异常,我查看了 exceptionly() 方法,但这不足以满足我的需求,我不想用它来拦截由一个异步方法并传递一个新的默认值,我希望它拦截一个异常,可能会破坏链并将链的输出元素的当前类替换为另一个,特别是主方法的输出类。

这是一个示例代码:

在上面的代码中,如果在 getTabularData 中抛出 SqlException,则异常捕获它并传递一个空列表,因为 getTabularData 的签名是

确实,在异常情况下,我可以区分 SqlException 或 NumberFormatException,但最终它必须将 List 传递给 thenApplyAsync,并且一旦流程进入那里,它就无法区分引发了什么异常并返回一个相应的结果不同。

有没有比使用老式的 try catch 块更好的方法来使用 CompletionStage 完成正确的异常处理?

谢谢你,罗伯托

0 投票
0 回答
35 浏览

java-8 - 如何将方法签名从 void 更改为 CompletionStage?

我计划从void搬到CompletionStage<Void>for validate(int x)

validate将更改如下,但我不确定如何在调用方使用。

有人可以帮助解释我如何使用它AnotherClass吗?

我不想尽可能多地使用它:

Printer.getInstance().validateInt(xyz, mno, intValue).toCompletableFuture().get()

0 投票
1 回答
163 浏览

java - 在 Java CompletionStage/CompletableFuture 中挣扎

看着文档和几个例子,我还是有点困惑。我想我了解了它的基本知识,但我对何时使用它们感到困惑。

我想我的主要问题..

  1. CompletionStage/CompletableFuture 都适用于异步代码吗?如果是这样,你为什么要使用一个而不是另一个?
  2. 如果 CompletionStage 可以用于非异步代码,为什么还要使用它呢?它与标准顺序代码有何不同?
  3. 他们甚至有什么不同?我看到您可以为 CompletionStage 和 CompletableFuture 调用异步方法。
  4. 您会在哪种情况下使用其中一种?
0 投票
1 回答
225 浏览

java-8 - 如何使用completionStage编写while循环,最终返回CompletionStage而不加入?

我必须编写一个返回的函数CompletionStage<Void>。该函数可以查询分页数据(异步操作,返回包裹在中的数据CompletionStage)并处理它们并查询下一组数据,直到它处理完整个数据集。有没有一种方法可以在不使用连接的情况下在完成阶段使用 while 循环?

0 投票
0 回答
90 浏览

java - Java 是否保证放置在 thenApply 中的代码始终可以访问方法参数的正确示例?

输出可能如下所示(每次都可能不同):

[id = "123123a", role = "roleB", customerData = "服务器返回的角色 A 的一些数据"], [id = "123123b", role = "roleC", customerData = "角色 B 返回的一些数据server"], [id = "123123c", role = "roleA", customerData = "服务器返回的角色 C 的一些数据"]

预期结果:

[id = "123123a", role = "roleA", customerData = "服务器返回的角色 A 的一些数据"], [id = "123123b", role = "roleB", customerData = "角色 B 返回的一些数据server"], [id = "123123c", role = "roleC", customerData = "服务器返回的角色 C 的一些数据"]

我建议在 thenApply 主体中的 getData 方法中的角色搞砸(不匹配 id),因为 thenApply 访问了 getData 方法参数的错误示例(它们正在更改顺序,因为 thenApply 在 WSRequest 返回的另一个线程中执行)。

请看我在代码中的评论。

有谁知道Java是否保证放置在thenApply中的代码总是可以访问方法参数的正确示例(在我的例子中是getData方法的参数)?

0 投票
2 回答
163 浏览

java - 如何使用 Akka 结合 Source.repeat 和 Source.completionStage

我正在使用带有微服务框架的akka​​,所以我有很多完成阶段的请求。我想从一个微服务中获取一个元素列表,并将它们与另一个微服务中的单个元素一起压缩,这样我最终得到一个 Pair<list item, single element> 的来源。

我不能用普通的 zip 来做到这一点,因为 Source.zip 会在两个源之一完成后立即完成,所以我最终只传播了一个元素。

我不能使用 Source.zipAll,因为这需要我提前定义默认元素。

如果我提前拥有单个元素,我可以使用 Source.repeat 使其重复传播该元素,这意味着 Source.zip 将在元素列表完成时完成,但 Source.repeat 不能完成阶段或 Source.completionStage。

我目前的策略是在 mapConcat 列表元素之前将这些东西压缩在一起。

这最终达到了我想要的,但我觉得有很多不必要的重复和同步移动数据。有没有更好的方法来解决我缺少的这个问题?

0 投票
0 回答
98 浏览

java - Scala `Future.recoverWith` 相当于`CompletionStage`?

所以我对 Java 有点生疏了,而 Scala 宠坏了我很多。

我知道一种叫做Future.recoverWith让我处理 aFuture与 another的错误的方法Future

我现在正在处理CompletionStages 的冗长问题,但我发现没有任何方法可以让我这样做。我可以从每个错误中恢复,并将错误或响应放在 Either 中,然后使用thenCompose,但这看起来很糟糕。

有什么建议么?