有没有办法延迟完成可完成的未来?

时间:2019-02-05 04:15:32

标签: java asynchronous java-stream completable-future

我将使用CompletableFuture进行异步调用。我想知道是否有一种方法可以延迟执行。我对一个流有大约5个异步调用,然后按需要链接然后使用thenApply / thenCompose。我的问题是,当我为调用创建第一个CF时,只要线程空闲,它将开始执行。我希望首先将所有任务链接在一起,然后当我调用时,例如complete(),它开始执行。我正在寻找的东西类似于Java流中的中间操作。在我之前关于SO的问题之一中,我对此有所帮助,但这并不能解决我的目的。

我的技术堆栈仅支持Java 8,因此无法使用下一版本中启动的任何功能。

1 个答案:

答案 0 :(得分:1)

我还不能发表评论,因此无法要求澄清。请原谅我,如果我不能正确理解,您需要什么。据我所知,您基本上只是在寻找一种方法来延迟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");
    });
}