我希望用Vertx开发基于Promise的应用程序,CompletableFuture正好适合这个用途,但是JVM在CompletableFuture后台使用fork/join可能会破坏Vertx线程安全。
你有任何想法或者已经在项目中使用过这个特性吗?
我希望用Vertx开发基于Promise的应用程序,CompletableFuture正好适合这个用途,但是JVM在CompletableFuture后台使用fork/join可能会破坏Vertx线程安全。
你有任何想法或者已经在项目中使用过这个特性吗?
此外还有https://github.com/cescoffier/vertx-completable-future。从 README 中可以看到:
该项目提供了 Completable Future API,但强制执行 Vert.x 的线程模型:
- 当使用 xAsync 方法(没有执行器)时,回调将在 Vert.x 上下文中调用。
- 当使用非异步方法时,它将使用调用者线程。如果是 Vert.x 线程,则仍使用相同的线程。如果不是由 Vert.x 线程调用,则仍然使用调用者线程。
- 当使用带有执行器参数的 xAsync 方法时,将使用此执行器来执行回调(不强制执行 Vert.x 线程系统)。
尚未使用过。
vertx.getOrCreateContext()
获取Context
,并在准备好时使用它来返回结果。Handler<AsyncResult<>>
,这是一个示例代码:public void doAsyncThing(String someParam, String otherParam, Handler<AsyncResult<Void>> resultHandler) {
Context vertxContext = vertx.getOrCreateContext();
CompletableFuture<Void> future =
someOperatinThatTriggersAsync(someParam, otherParam)
.handleAsync((unused, throwable) -> {
vertxContext.runOnContext(unused1 -> {
if (throwable == null) {
responseHandler.handle(Future.succeededFuture());
} else {
responseHandler.handle(Future.failedFuture(throwable));
}
});
return null;
});
}