我需要从 rxkotlin 链启动协程,但我不确定这是对还是错,从我使用的 rx 链启动协程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()
}
}
上面的代码是正确的方法还是有其他方法可以实现这一点?谁能帮我解决这个问题
这个代码块从根本上是错误的。
- 在您的情况下,实际上没有必要使用协程,因为您可以在使用
observeOn
flatMap
之前轻松更改 Rx 线程并传递您想要的任何Scheduler
(如 IO(。 - Kotlin 协程旨在避免
Threads
,因为创建Threads
是一个非常昂贵的操作。您的函数startCoroutines
为每个操作创建一个新线程,这毫无意义,可能会导致overflow
.您可以在此处阅读更多相关信息:"协程"和"线程"之间的区别? - 在决定使用
runBlocking
之前,您应该始终尝试找到更好的系统设计。阻塞线程从来都不是一个好主意。