问题标签 [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 投票
1 回答
296 浏览

java - 如果返回失败的阶段,为什么 thenCombine 结果不能异常完成?

以下代码片段调用thenCombine ,并没有在whenComplete设置异常(它打印No exception):

但是,下面调用thenCompose的类似代码确实设置了一个异常:

为什么在 BiFunction 实际上返回失败阶段时thenCombine返回正常完成?CompletionStage

0 投票
1 回答
441 浏览

quarkus - 使用 Quarkus/Mutiny 在反应式 REST GET 端点中调度 CompletionStage / CompletableFuture API 服务

使用回调结构使用 Quarkus / Mutiny 实现 Reactive REST GET 端点并使用阻塞服务检查变体后,我最终使用了 CompletionStage / CompletableFuture API 版本;

如何使用 Quarkus/Mutiny 从我的 Reactive REST GET 端点调用 CompletionStage / CompletableFuture API 服务

0 投票
0 回答
49 浏览

spring - 使用非反应性 ServerResponse 下载 Spring 文件

我正在构建一个 Spring Boot 应用程序来根据 url 请求进行文件下载。由于各种原因,我不得不使用旧的 web mvc api(而不是响应式 api)。我还使用了 RouterFunction (org.springframework.web.servlet.function.RouterFunction) 和 ServerResponse (org.springframework.web.servlet.function.ServerResponse) 来路由传入的下载文件请求。我有一个输入流,我需要将其复制到服务器响应的输出(即输入流中的数据应该成为响应的主体)。但是,我不确定我需要编写什么代码来执行此操作。我知道如何将输入流复制到输出流,但是我在哪里可以获取 ServerResponse 中的输出流?我看到了一些关于 CompletionStage 的东西,但我不熟悉它们,而且我 我不确定如何将输入流引入其中(或者即使 CompletionStage 是我需要的)。我正在用 kotlin 写这个,但我相信我可以将 java 答案翻译成等效的 kotlin 代码。

任何建议,将不胜感激。

0 投票
0 回答
25 浏览

java - LoadingCache 不适用于 CompletionStage

我需要将 CompletionStage 值加载到 LoadingCache 中,但它不起作用,每次我调用缓存时,该值都不是从缓存中返回,而是从返回要加载到缓存中的值的方法中返回. 这是我的代码,请告诉我如何修复它。

0 投票
1 回答
218 浏览

java - Resilience4j 使用 CompletionStage 重试

我正在使用这种方法,希望 executeCall 在引发异常时至少重试 3 次。executeCall(request) 方法返回一个 CompletionStage。

当我尝试对这段代码进行单元测试时,executeCall(request) 方法的调用次数只有一次(我在这个方法中抛出了一个异常)。

如何确保它至少重试 5 次(这是默认值)

0 投票
0 回答
98 浏览

java - 如何嵌套 CompleteFuture 超时

我正在尝试做的事情:
背景:延迟很关键。我有 2 个方法返回基本相同的信息,但执行方式不同。平均而言,一个会更快,但有时可能会更慢。第二个平均速度较慢,但​​更可靠。

所以要求是:

  1. 我有 2 个 CompletableFutures。我想拿第一个回来的。
  2. 当第一个未来发生异常时,我想回退到第二个。
  3. 当第二个未来发生异常时,我想生成异常响应。
  4. 由于#2 和#3,如果两者都发生异常,我想生成异常响应。

现有代码尝试:

对于以下情况,这完全符合预期:

  1. 如果firstFuture先返回,那就是整体结果。
  2. 如果secondFuture先返回,那就是整体结果。
  3. 如果firstFuture遇到异常 (by doOptimisticWork) 然后我们回退到secondFuture.
  4. 如果secondFuture遇到异常,我们直接生成异常响应。
  5. 如果firstFuture超时,那么我们已经返回secondFuture,所以这实际上与 #2 相同。
  6. 如果secondFuture超时,那么我们已经返回firstFuture,所以这实际上与 #1 相同。

这不适用于以下情况:

  1. firstFuture和超时secondFuture。在这种情况下,

我希望compositeFuture异常完成(未来触发这个的一些随机机会,因为它们都有相同的超时)。这会触发 teh 中的异常子句completableFuture,然后等待firstFuture完成。然后firstFuture应该遇到一个超时异常,这会触发它回退到它自己的(secondFuture)异常子句,我们会在该子句中生成一个异常响应。

我添加了一堆 println 来检查每个步骤中每个 CompletableFuture 的状态。实际上发生的是compositeFuture异常完成(如预期),然后我们等待secondFuture完成。then 似乎忽略了自己的secondFuture超时,只是无限期地等待其供应商完成。这是一个问题,因为现在整个序列都在等待这个,因为compositeFuture连接方法被阻塞了。

我对 和 的接近时间持怀疑态度firstFuturesecondFuture但无法通过注入不同的超时来重现任何决定性的行为。有趣的是,我可以通过单元测试确保在do<>Work方法抛出异常时按预期工作,唯一的问题似乎是 CF 配置的超时。

问题:
我们如何将 2 个具有自己超时的 CompleteableFuture 嵌套到一个复合 CompletableFuture 中,并获得遵守超时的整体序列?

0 投票
0 回答
53 浏览

java - CompletedStage.completedFuture VS CompletedStage.completedStage

我看到 Java9 CompletedStage.completedStage() 几乎等于 CompletedStage.ompletedFuture()

当我们必须返回时

CompletionStage<Void>

我们可以同时返回。CompletedFuture.completedFuture() 未被弃用,并且在 CompletedStage() 的 Java 文档中写入

那么真正的区别是什么,什么时候必须使用一个而不是另一个?什么时候必须返回 Void 比较好?

或者

0 投票
1 回答
173 浏览

java - 如何在带有 http 请求的 lambda 上对 whenCompleteAsync 进行单元测试?

我想为以下类创建一个单元测试:

我已经嘲笑了一切,直到.whenCompleteAsync(consumer)使用这样的东西:

我目前无法更改课程的设计,只能对其进行测试。

如何模拟消费者对象以使代码在 lambda 内运行?这甚至可能吗?

0 投票
2 回答
333 浏览

java - completeExceptionally 和 obtrudeException 之间的区别

只是浏览CompletableFuture文档并偶然发现了completeExceptionallyobtrudeException方法,并且很难理解差异和用例。社区可以通过示例帮助了解差异和用例吗?

0 投票
1 回答
130 浏览

java - 如何强制 CompletableFuture.thenApply() 在运行前一阶段的同一线程上运行?

这是我面临的问题的简短代码版本:

这是我得到的输出:

看到那里我很惊讶main!我预计当我取消注释调用时会发生这样的事情,Thread.sleep()甚至取消注释sysout那里的单个语句:

我知道thenApplyAsync()会确保它不会在main线程上运行,但我想避免将供应商返回的数据从运行supplyAsync的线程传递给将要运行的线程thenApply以及链中的其他后续thens。