在一个quarkus / kotlin应用程序中,我希望同时启动多个数据库请求。我是quarkys的新手,我不确定我做的事情是否正确:
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()真的会并行制作吗?在夸克中这样做是正确的吗?
发布于 2020-09-18 14:28:50
是的,你的代码是正确的。
Uni.combine().all()同时运行所有传递的Unis。当所有Unis都已完成(发出一个结果)时,您将获得元组(包含单个结果)。
从您的代码中,您可以删除元组步骤,而改用combineWith。
最后,请注意,如果其中一个Uni未完成(无论出于何种原因),await().indefinitely()将永远阻塞调用者线程。我强烈推荐使用await().atMost(...)
https://stackoverflow.com/questions/63843627
复制相似问题