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

asynchronous - 什么是“这个阶段的默认异步执行工具”?(Java CompletionStage/CompletableFuture)

CompletionStageComletableFuture的 Oracle Java 文档中,所有*Async没有显式 Executor 参数的方法都是指某个阶段的默认异步执行工具

使用此阶段的默认异步执行工具执行给定的操作

但是这个“执行设施”是什么并没有明确定义!这是否意味着一些默认的执行程序/线程池?

至少ComletableFuture文档提到:

所有没有显式 Executor 参数的异步方法都使用ForkJoinPool.commonPool()

那么,这是否意味着这ForkJoinPool.commonPool()是“默认的异步执行工具”?

除了线程池和Executor“默认异步执行工具”之外,还有什么?

0 投票
1 回答
482 浏览

java - Java - 在异步 thenCompose 中同步调用

考虑下面的代码,因为我找不到更好的词来问这个问题:

mandatoryComputationToGetManager()返回一个CompletionStage

现在我的疑问是:

我想打电话mandatoryComputationToGetManager(),在它的计算之后我想getManagerById(...)被叫。

我知道可以有一种方法,即thenCompose()先调用做mandatoryComputationToGetManager(),然后thenCompose()对先前的结果再做另一个getManagerById()。但是我想弄清楚是否有一种方法可以不用将一个thenCompose()o/p 连接到另一个,我可以一直保持到mandatoryComputationToGetManager()结果准备好。

据我了解,getManagerById()即使结果尚未准备好,上面的代码也会被调用mandatoryComputationToGetManager(),我想等待,这样一旦mandatoryComputationToGetManager()给出结果getManagerById()就应该异步计算。

0 投票
1 回答
249 浏览

java-8 - 涉及提前返回时将阻塞代码转换为非阻塞代码

我正在尝试转换如下所示的阻塞 Play 框架控制器操作:

使用接口进入非阻塞代码Future,即返回一个CompletionStage<Result>

如您所见,我同时需要result1result2。我假设我不能使用supplyAsync并且thenCombine因为result2只在某些情况下才需要计算。

0 投票
1 回答
294 浏览

java - 在 Play 中动态设置 CompletionStages 的线程池大小!与阿卡

在我的网络应用程序中,我使用的是 Play!基于 Akka 构建的用于管理线程的框架。在特定情况下,我编写了许多从外部服务收集数据的 CompletionStages,我想控制并行请求的数量,以免这些外部服务负担过重。在不更改整个应用程序的情况下执行此操作的一种方法是控制 Akka 使用的线程池大小。现在我在akka like中准备了两个线程池,并尝试在两个池之间切换。我正在使用以下内容编写我的 CompletionStages:

根据 Akka 的文档,这是设置当前线程池的方法:

通过观察我的应用程序,像这样设置上下文不会影响应用程序,并且只考虑默认调度程序。有没有办法动态设置 Akka 中当前池的大小?

0 投票
0 回答
61 浏览

java - Set Akka Dispatcher AND HtttpContext for a CompletionStage

Using Play! with CompletionStages, you can supply the an HTTP context like this:

Since Play! is based on Akka, you can supply an Akka Dispatcher the same way:

But I have to supply both to the same CompoletionStage. I didn't find any documentation about this specific case. Play! provides an Akka Dispatcher by default, but I have to use my own dispatcher and even to switch between multiple dispatchers in runtime, so I have to either supply both contexts or tell the current HttpExecutionContext to use my dispatcher instead of Play!s default one. Any ideas?

0 投票
1 回答
916 浏览

java-8 - 如何使用 CompletionStage 的集合很好地完成 allOf/AnyOf

目前,要使用 Collections of CompletionStage 做一些简单的事情需要跳过几个难看的箍:

我想写的是:

关于 toCompletableFuture 并转换为 Array 和 join 的整个过程是样板文件,分散了实际代码语义的注意力。

在某些情况下,可能有一个版本的 allOf() 返回 aFuture<Collection<Future<X>>>而不是Future<Collection<X>>也可能有用。

我可以尝试自己实现 XXXUtil,但我想知道是否已经有一个成熟的 3rdparty 库来解决这个问题和类似问题(例如 Spotify 的 CompletableFutures)。如果是这样,我希望看到这样一个库的等效代码作为答案。

或者也许上面发布的原始代码可以以不同的方式以某种方式更紧凑地编写?

JUnit测试代码:

0 投票
2 回答
1588 浏览

java - 在 Java 中将 CompletionStage 组合到 play 框架动作中

我尝试在游戏框架中组合 CompletionStages,然后返回一个像 ok() 这样的结果。这是我的设置:

AccountDao 有两种方法:

然后我让我的控制器执行以下操作:

所以现在在操作中我想首先执行 getUserByEmail 然后我想设置一些值并使用 updateAccount 方法更新它。如何在不阻塞播放上下文的情况下结合这两个阶段?我用 thenCompose 和 combine 尝试了不同的设置,但我不明白......

这是我的尝试之一:

这里的问题是,我无法从以前访问帐户(x),因为我无法将其设置为函数......像这样:

在这里我得到错误:这个表达式的目标类型必须是一个函数接口并且plays说我必须在函数末尾包含return语句!

我只是不明白...感谢您的帮助!

@Marimuthu Madasamy 这不正是我想要的。在您的 awnser 中,我会更新帐户两次。在 accountDao.updateAccount(account) 和 accountDao.saveAccount(account) 中的 etime;我想要这样的东西:

在这种情况下,只更新一次帐户,并且只在 httpExecutionContext 上返回结果

0 投票
1 回答
31 浏览

java - 有没有办法在所有后代阶段完成后执行一个动作?

CompletionStage.whenComplete()在当前阶段完成后执行一个动作,但是如果阶段有依赖阶段会发生什么?当我无权访问依赖项时,是否有办法在所有依赖阶段完成后执行操作?

例子:

registerCleanup()只能访问,但它希望注册一个将在执行parent后清理的操作。child这可以做到吗?

0 投票
2 回答
4961 浏览

java - 如何在 java 中组合多个 List(for me) 或其他类型的 CompletionStage 响应

我正在尝试创建多个List 类型的CompletionStage,例如。CompletionStage<List<Car>>. 最后,我想在一个CompletionStage中将所有类型的响应合并<List<Car>>到一个 List 中。

所以在这里,假设我有 3 种不同的服务,它们会给我不同的汽车列表作为响应形式CompletionStage<List<Car>>

现在我正在尝试将它们结合起来并创建一个通用的汽车列表,这里我遇到了问题。我正在使用下面的代码来组合结果

最后我在做

那么我做错了什么?我怎样才能将这三个结合起来?我在阻止什么吗?

注意:我已经从 Holger 检查了这个答案,但无法弄清楚如何在那里使用 concat 。

0 投票
1 回答
2496 浏览

java - 使用 CompletionStage 而不是 CompletableFuture

给出以下方法:

以下语句可用于以异步方式运行该方法。

尽管我认为我了解CompletionStage与 的关系CompletableFuture,但我不确定如何使用它CompletionStage来完成相同的任务。

另外,我不确定“组合阶段”