Есть ли способ отсрочить выполнение завершаемого будущего? - PullRequest
0 голосов
/ 05 февраля 2019

Я буду использовать CompletableFuture для моих асинхронных вызовов.Я хотел бы знать, если есть способ отложить его выполнение.У меня есть около 5 асинхронных вызовов для одного потока, и я приковываю цепочку, используя thenApply / thenCompose по мере необходимости.Моя проблема в том, что когда я создаю первый CF для вызова, он начинает выполняться всякий раз, когда поток свободен.Я хочу, чтобы сначала все мои задачи были объединены в цепочку, затем, когда я вызываю, скажем, complete (), он начинает выполняться.Я ищу что-то похожее на промежуточные операции в потоках Java.Я получил некоторую помощь по этому поводу в одном из моих предыдущих вопросов о SO, но это не решает мою задачу.

Мой технический стек поддерживает только Java 8, поэтому не может использовать какие-либо функции, запущенные в следующих версиях.

1 Ответ

0 голосов
/ 05 февраля 2019

Я пока не могу писать комментарии, поэтому не могу просить разъяснений.Пожалуйста, прости меня, если я не правильно понял, что тебе нужно.Из того, что я могу сказать, вы в основном просто ищете способ отложить выполнение 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");
    });
}
...