Как прервать базовое выполнение CompletableFuture ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Как прервать базовое выполнение CompletableFuture

Сообщение Anonymous »

Я знаю, что дизайн CompletableFuture не контролирует его выполнение с помощью прерываний, но я полагаю, что у некоторых из вас может возникнуть эта проблема. CompletableFuture — очень хороший способ организовать асинхронное выполнение, но, учитывая случай, когда вы хотите, чтобы базовое выполнение было прервано или остановлено при отмене Future, как нам это сделать? Или мы должны просто признать, что любой отмененный или завершенный вручную CompletableFuture не повлияет на поток, работающий над его завершением?

То есть, по моему мнению, заведомо бесполезная работа, отнимающая время работника-исполнителя. Интересно, какой подход или дизайн может помочь в этом случае?

ОБНОВЛЕНИЕ

Вот простой тест для этого

public class SimpleTest {

@Test
public void testCompletableFuture() throws Exception {
CompletableFuture cf = CompletableFuture.runAsync(()->longOperation());

bearSleep(1);

//cf.cancel(true);
cf.complete(null);

System.out.println("it should die now already");
bearSleep(7);
}

public static void longOperation(){
System.out.println("started");
bearSleep(5);
System.out.println("completed");
}

private static void bearSleep(long seconds){
try {
TimeUnit.SECONDS.sleep(seconds);
} catch (InterruptedException e) {
System.out.println("OMG!!! Interrupt!!!");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/290 ... ablefuture

Вернуться в «JAVA»