Rxjava与Kotlin协程

时间:2019-07-19 05:00:06

标签: android kotlin kotlin-android-extensions kotlin-coroutines

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

上面的代码是正确的方法还是有其他方法可以实现? 谁能帮我这个忙

1 个答案:

答案 0 :(得分:1)

此代码块本质上是错误的。

  1. 在您的情况下,实际上没有必要使用协程,因为您可以在flatMap之前用observeOn轻松更改Rx线程,并传递所需的任何Scheduler(如IO)。 / li>
  2. 科特琳协同程序的设计避免使用Threads,因为创建Threads是非常昂贵的操作。并且您的函数startCoroutines为每个操作创建一个新线程,这没有意义,并可能导致overflow。您可以在此处了解更多信息:Difference between a "coroutine" and a "thread"?
  3. 在决定使用runBlocking之前,应始终尝试找到更好的系统设计。阻塞线程绝不是一个好主意。