如何将CompletableFuture转换为Vert.X未来



我正试图在协同程序中使用vertx反应式sql客户端执行一个db事务。不知怎的,我不知道如何将CompletableFuture转换为所需的io.vertx.core.Future类型。有没有任何帮助方法或扩展可以轻松做到这一点?

val client : PgPool
... 
suspend fun someServiceFunction () {
coroutineScope {
client.withTransaction { connection ->
val completableFuture = async {
repository.save(connection, requestDTO)  //This is a suspend function
}.asCompletableFuture()
//Return type has to be a io.vertx.core.Future
//How can I transform the completableFuture to it ?
}
}
}

谢谢你的帮助!

Vert.x Future有一种转换方法:

future = Future.fromCompletionStage(completionStage, vertxContext)

我从asCompletableFuture()的代码中修改了这一点,以用作替代方案。免责声明:我没有使用Vert.x,我也没有测试这个。

fun <T> Deferred<T>.asVertxFuture(): Future<T> {
val promise = Promise.promise<T>()
invokeOnCompletion {
try {
promise.complete(getCompleted())
}  catch (t: Throwable) {
promise.fail(t)
}
}
return promise.future()
.onComplete { result ->
cancel(result.cause()?.let {
it as? CancellationException ?: CancellationException("Future was completed exceptionally", it)
})
}
}

我想知道将协同程序与Vert.x混合是否会因为没有使用Vert.x线程池而影响性能。也许您可以创建一个借用其线程池的Dispatchers.Vertx

相关内容

  • 没有找到相关文章

最新更新