有没有办法延迟可完成的未来的执行?
Is there a way to delay the execution of the completable future?
我将使用 CompletableFuture 进行异步调用。我想知道是否有办法延迟执行。对于一个流程,我有大约 5 个异步调用,然后根据需要使用 thenApply/thenCompose 进行链接。我的问题是当我为调用创建第一个 CF 时,它会在线程空闲时开始执行。我希望首先我所有的任务都应该被链接起来,然后当我调用 complete() 时,它开始执行。我正在寻找的是类似于 Java 流中的中间操作的东西。在我之前关于 SO 的一个问题中,我在这方面得到了一些帮助,但这并没有解决我的目的。
我的技术堆栈只允许 Java 8,因此无法使用下一版本中推出的任何功能。
我还不能写评论,所以我不能要求澄清。请原谅我,如果我没有正确理解你需要什么。据我所知,你基本上只是在寻找一种方法来延迟 CompletableFuture 的执行,直到你准备好这样做。
您是否考虑过将另一个 CF 作为您要调用的函数的参数?准备就绪后,只需完成此 CF,然后函数就会执行。
它有点像这样:
CompletableFuture<Void> setup = new CompletableFuture<>();
delayedFunction(setup);
//do whatever you want
System.out.println("foo");
//once you are ready, complete setup to execute the delayed function
setup.complete(null);
public static CompletableFuture<Void> delayedFunction(CompletableFuture<Void> setup) {
return setup.
thenAccept(v-> {
System.out.println("bar");
});
}
我将使用 CompletableFuture 进行异步调用。我想知道是否有办法延迟执行。对于一个流程,我有大约 5 个异步调用,然后根据需要使用 thenApply/thenCompose 进行链接。我的问题是当我为调用创建第一个 CF 时,它会在线程空闲时开始执行。我希望首先我所有的任务都应该被链接起来,然后当我调用 complete() 时,它开始执行。我正在寻找的是类似于 Java 流中的中间操作的东西。在我之前关于 SO 的一个问题中,我在这方面得到了一些帮助,但这并没有解决我的目的。
我的技术堆栈只允许 Java 8,因此无法使用下一版本中推出的任何功能。
我还不能写评论,所以我不能要求澄清。请原谅我,如果我没有正确理解你需要什么。据我所知,你基本上只是在寻找一种方法来延迟 CompletableFuture 的执行,直到你准备好这样做。
您是否考虑过将另一个 CF 作为您要调用的函数的参数?准备就绪后,只需完成此 CF,然后函数就会执行。 它有点像这样:
CompletableFuture<Void> setup = new CompletableFuture<>();
delayedFunction(setup);
//do whatever you want
System.out.println("foo");
//once you are ready, complete setup to execute the delayed function
setup.complete(null);
public static CompletableFuture<Void> delayedFunction(CompletableFuture<Void> setup) {
return setup.
thenAccept(v-> {
System.out.println("bar");
});
}