首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Uni事件带回调用线程。

将Uni事件带回调用线程。
EN

Stack Overflow用户
提问于 2022-01-21 14:33:04
回答 1查看 155关注 0票数 0

给定Quarkus应用程序中的订阅:

代码语言:javascript
复制
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线程上执行),processBprocessC将在工作线程上执行,processD将再次在调用方/IO线程上执行。

如何使processC在IO线程上被调用,而processB仍然在工作线程上?是否有一种简单的方法将事件带回调用线程?

编辑:现在我正在使用以下解决方法:

代码语言:javascript
复制
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) }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 09:00:32

您需要捕获Vert.x上下文并切换回它。像这样的东西会起作用(使用Java,因为我的Kotlin不是很好):

代码语言:javascript
复制
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));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70802959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档