给定 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
将在调用者线程上执行(所以如果它在 Verticle 中,它应该在 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) }