我需要从rxkotlin链中启动协程,但是我不确定这是对还是错,从rx链中启动协程,我使用runblocking
来启动suspend方法
示例
Single.just(someOperation())
.map{
someMethod(it)
}
.flatMap{
startCoroutines(suspend { someOpeartions() } ) // i will be starting the coroutines here
}
协程
fun startCoroutines(suspendingObj : suspend () -> Any){
runBlocking(newFixedThreadPoolContext(1,"Thread")){
suspendingObj.invoke()
}
}
上面的代码是正确的方法还是有其他方法可以实现? 谁能帮我这个忙
答案 0 :(得分:1)
此代码块本质上是错误的。
flatMap
之前用observeOn
轻松更改Rx线程,并传递所需的任何Scheduler
(如IO)。 / li>
Threads
,因为创建Threads
是非常昂贵的操作。并且您的函数startCoroutines
为每个操作创建一个新线程,这没有意义,并可能导致overflow
。您可以在此处了解更多信息:Difference between a "coroutine" and a "thread"? runBlocking
之前,应始终尝试找到更好的系统设计。阻塞线程绝不是一个好主意。