Java Concurrent API не предоставляет достаточных возможностей для комфортной разработки асинхронного кода и работы с ним. Всякий раз приходится что-то изобретать, иначе прикладная логика может потеряться на фоне обилия технических деталей, необходимых для поддержки асинхронности. Библиотека предоставляет набор средств, нацеленных на упрощение разработки асинхронных компонентов, сделать их код более понятным и выразительным, максимально очистить логику от технических деталей.
Например, реализация команды git pull
могла бы выглядеть так:
CompletableFuture<Void> pull(String repository) {
var localRepository = new LocalRepository(repository);
var remoteRepository = new RemoteRepository(repository);
return AsyncPipeline
// Получение последнего комита в локальном репозитории
.supply(flow -> localRepository.getLastCommit())
// Загрузка новых комитов из удаленного репозитория
.await((flow, lastCommit) -> remoteRepository.loadCommitsSince(lastCommit))
// Сохранение новых комитов в локальном репозитории
.await((flow, remoteCommits) -> localRepository.saveCommits(remoteCommits))
.toCompletableFuture();
}
Gradle
implementation 'ru.asynchronizer:asynchronizer:1.0.0'
Gradle (Kotlin)
implementation("ru.asynchronizer:asynchronizer:1.0.0")
Maven
<dependency>
<groupId>ru.asynchronizer</groupId>
<artifactId>asynchronizer</artifactId>
<version>1.0.0</version>
</dependency>