在quarkus / kotlin应用程序中,我想同时启动多个数据库请求。我是quarky的新手,我不确定自己做对的事情是否正确:
val uni1 = Uni.createFrom().item(repo1).onItem().apply { it.request() }
val uni2 = Uni.createFrom().item(repo2).onItem().apply { it.request() }
return Uni.combine().all()
.unis(uni1, uni2)
.asTuple()
.onItem()
.apply { tuple ->
Result(tuple.item1, tuple.item2) }
.await()
.indefinitely()
request()
真的可以并行制作吗?在quarkus中是正确的方法吗?
最佳答案
是的,您的代码是正确的。Uni.combine().all()
同时运行所有传递的Unis。所有Unis都已完成(发出结果)后,您将获得元组(包含单个结果)。
您可以从代码中删除元组步骤,而改为使用combineWith
。
最后,请注意,如果Uni之一未完成(无论出于何种原因),则await().indefinitely()
永远阻止调用者线程。我强烈建议使用await().atMost(...)
关于kotlin - Quarkus:执行并行unis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63843627/