Android Rxjava与kotlin协程
我需要从rxkotlin链启动协同路由,但我不确定这是否正确,要从rx链启动协同路由,我使用Android Rxjava与kotlin协程,android,kotlin,kotlin-android-extensions,kotlin-coroutines,Android,Kotlin,Kotlin Android Extensions,Kotlin Coroutines,我需要从rxkotlin链启动协同路由,但我不确定这是否正确,要从rx链启动协同路由,我使用runblocking启动挂起方法 示例 Single.just(someOperation()) .map{ someMethod(it) } .flatMap{ startCoroutines(suspend { someOpeartions() } ) // i will be starting the coroutines here } 协同程序 fun s
runblocking
启动挂起方法示例
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()
}
}
上述代码是正确的方法还是有其他方法可以实现?
有人能帮我解决这个问题吗?这个代码块根本上是错误的
flatMap
之前使用observeOn
轻松地更改Rx线程,并传递您想要的任何调度程序(如IO)
线程
,因为创建线程
是一项非常昂贵的操作。而你的函数startcoutlines
会为每一个没有意义的操作创建一个新的线程,这可能会导致溢出
。您可以在此处阅读更多信息:runBlocking
之前,您应该始终尝试找到更好的系统设计。阻塞线程从来不是一个好主意如果已经在链中,为什么需要协同路由?我想它应该是rx或协程。@TentenPonce这样做是错误的吗?为什么?rx已经是异步的,为什么要在它里面使用协程?如果您的目标是更改线程,那么rx
.observeOn()
已经支持该线程。你可以不用挂起,只需让它接收并添加到你当前的链上。阻塞几乎从来都不是一个好的选择,接收或不接收。可以连接这两种方法的转换器和构建器。例如