Rxjava with kotlin coroutines



我需要从 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()
  }
}

上面的代码是正确的方法还是有其他方法可以实现这一点?谁能帮我解决这个问题

这个代码块从根本上是错误的。

  1. 在您的情况下,实际上没有必要使用协程,因为您可以在使用 observeOn flatMap之前轻松更改 Rx 线程并传递您想要的任何Scheduler(如 IO(。
  2. Kotlin 协程旨在避免Threads,因为创建Threads是一个非常昂贵的操作。您的函数startCoroutines为每个操作创建一个新线程,这毫无意义,可能会导致overflow.您可以在此处阅读更多相关信息:"协程"和"线程"之间的区别?
  3. 在决定使用 runBlocking 之前,您应该始终尝试找到更好的系统设计。阻塞线程从来都不是一个好主意。

最新更新