Я хочу создать цепочку CompletableFutures.
Я пытаюсь создать вещи следующим образом.
Задача 1 выполняет что-то и возвращает строку в качестве результата, когда задача 1 выполнена, я хочу запустить задачу 2 в качестве ввода результатаЗадача 1. Задача 2, когда она готова, она возвращает целое число и так далее ...
Так что это должно быть очень динамично, поэтому у меня уже есть это:
try {
CompletableFuture<String> task1Future = CompletableFuture.supplyAsync(new Task1());
CompletableFuture<String> result = task1Future.thenCompose(task1Result -> CompletableFuture.supplyAsync(new Task2(task1Result)));
System.out.println(result.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
public class Task1 implements Supplier<String> {
public Task1() {
System.out.println("Task 1 started");
}
@Override
public String get() {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
return "Result Task 1";
}
}
Что я знаю попробоватьдобиться - построить Wrapper (своего рода связанный список):
Список задач, где задача должна быть:
public class Task {
private Supplier startTask;
private Task followUpTask;
public Task(Supplier startTask, Task followUpTask) {
this.startTask = startTask;
this.followUpTask = followUpTask;
}
}
Но я застрял, потому что не знаю каксделать цепочку и сделать задачу более общей, чтобы ее можно было начать с любого результата предыдущей задачи.
Так что мне нужен метод для конструирования CompletableFuture и просто сказать start (), и все происходит.
Может кто-нибудь помочь мне в пути?