给定Quarkus应用程序中的订阅:
Uni.createFrom.Item(1)
.chain { it -> processA(it) }
.emitOn(Infrastructure.getDefaultWorkerPool())
.chain { it -> processB(it) }
.chain { it -> processC(it) }
.subscribe().with{ it -> processD(it) }如果我正确理解,processA将在调用方线程上执行(因此,如果它位于一个垂直线上,则应该在IO线程上执行),processB和processC将在工作线程上执行,processD将再次在调用方/IO线程上执行。
如何使processC在IO线程上被调用,而processB仍然在工作线程上?是否有一种简单的方法将事件带回调用线程?
编辑:现在我正在使用以下解决方法:
Uni.createFrom.Item(1)
.chain { it -> processA(it) }
.chain { i -> Uni.createFrom().future { Infrastructure.getDefaultWorkerPool().submit{ processB(i) } } }
.chain { it -> processC(it) }
.subscribe().with{ it -> processD(it) }发布于 2022-01-26 09:00:32
您需要捕获Vert.x上下文并切换回它。像这样的东西会起作用(使用Java,因为我的Kotlin不是很好):
Context context = Vertx.currentContext();
Uni.createFrom().item(1)
.chain(it -> processA(it))
.emitOn(Infrastructure.getDefaultWorkerPool())
.chain(it -> processB(it))
.emitOn(runnable -> context.runOnContext(ignored -> runnable.run())
.chain(it -> process(it))
.subscribe().with(it -> processD(it));https://stackoverflow.com/questions/70802959
复制相似问题