Skip to content

Latest commit

 

History

History
32 lines (25 loc) · 2.2 KB

async-completable-future.ru.md

File metadata and controls

32 lines (25 loc) · 2.2 KB

AsyncCompletableFuture

Обстоятельство

Использование

Класс AsyncCompletableFuture повторяет функциональность java.util.concurrent.CompletableFuture, но позволяет определить исполнитель по умолчанию. Если исполнитель по умолчанию не определен явно, используется Asynchronizer.commonPool().

Класс AsyncCompletableFuture позволяет установить исполнитель по умолчанию, учитывающий асинхронный контекст в продолжениях, для которых исполнитель не определен явно, как например, CompletableFuture.thenAcceptAsync(Consumer). В таких случаях CompletableFuture использует ForkJoinPool.commonPool(), и это может спровоцировать неожиданное поведение для стороны, которая предоставляет экземпляр будущего. Как минимум, асинхронный контекст не будет доступен для продолжений, так они создаются с исполнителем, который не копирует контекст.

IAsyncContext context = Asynchronizer.context();
context.setProperty("userId", 123);
...

AsyncCompletableFuture.completedFuture("Привет, ")
        // Это продолжение будет иметь тот же контекст
        .thenAcceptAsync(result -> {
            var userId = context.getProperty("userId");
            System.out.println(result + userId); // Вывод: "Привет, 123"
        })
        .get();