в наши дни де-факто библиотека для написания асинхронного неблокирующего кода на JVM - RxJava . если вы не знакомы, я бы сказал, что вам стоит взглянуть, поскольку одно из многих преимуществ - это возможность записывать «потоки» в виде композиционных потоков, которые не являются такими же адскими вызовами, как JDK Future
с были.
К счастью, Vert.x интегрирован с RxJava. В качестве примера, вот ваш фрагмент, переписанный с использованием артефактов RxJava:
@Override
public void start(Future<Void> startFuture) throws Exception {
final FileSystem fs = vertx.fileSystem();
fs.rxCreateFile("/foo")
.andThen(fs.rxWriteFile("/foo", Buffer.buffer()))
.andThen(fs.rxMove("/foo", "/bar"))
.subscribe(
() -> {
startFuture.complete();
},
error -> {
startFuture.fail(error);
}
);
}
гораздо лаконичнее и удобочитаемее.
Примечание:
- использовать RxJava 2, поскольку он заменен RxJava 1
- ... однако обе версии поддерживаются в Vert.x, а их соответствующие артефакты находятся в отдельных пространствах имен:
io.vertx.rxjava
для версии RxJava 1 артефакты
io.vertx.reactivex
для версии RxJava 2 артефакты
надеюсь, это поможет!