Monix

签出 interop-monix 模块以获得与 Monix 的互操作支持。

转换 Task

互操作层提供对以下转换的支持:

  • 将 Task[A] 转为 UIO[Task[A]]
  • 将 Task[A] 转为 Task[A]

要将 IO 转换为 Task,请使用以下方法:

def toTask: UIO[eval.Task[A]]

要执行反方向的转换,请使用以下定义在 IO 伴随对象中的扩展方法:

def fromTask[A](task: eval.Task[A])(implicit scheduler: Scheduler): Task[A]

请注意,为了将 Task 转换为 IO,需要使用适当的 Scheduler

例子

import monix.eval.Task
import monix.execution.Scheduler.Implicits.global
import zio.{ IO, Runtime }
import zio.interop.monix._

object UnsafeExample extends App {

  val runtime = Runtime.default

  def main(args: Array[String]): Unit = {
    val io1 = IO.succeed(10)
    val t1  = runtime.unsafeRun(io1.toTask)

    t1.runToFuture.foreach(r => println(s"IO to task result is $r"))

    val t2  = Task(10)
    val io2 = IO.fromTask(t2).map(r => s"Task to IO result is $r")

    println(runtime.unsafeRun(io2))
  }
}

转换 Coeval

要将 IO 转换为 Coeval,请使用以下方法:

def toCoeval: UIO[eval.Coeval[A]]

要执行反方向的转换,请使用以下定义在 IO 伴随对象中的方法:

def fromCoeval[A](coeval: eval.Coeval[A]): Task[A]

例子

import monix.eval.Coeval
import zio.{ IO, Runtime }
import zio.interop.monix._

object UnsafeExample extends App {

  val runtime = Runtime.default

  def main(args: Array[String]): Unit = {
    val io1 = IO.succeed(10)
    val c1  = runtime.unsafeRun(io1.toCoeval) 

    println(s"IO to coeval result is ${c1.value}")

    val c2  = Coeval(10)
    val io2 = IO.fromCoeval(c2).map(r => s"Coeval to IO result is $r")

    println(runtime.unsafeRun(io2))
  }
}
Leave a Reply
Your email address will not be published.
*
*

BACK TO TOP