首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Scala2.10未来版本转换为scalaz.concurrent.Future //任务

将Scala2.10未来版本转换为scalaz.concurrent.Future //任务
EN

Stack Overflow用户
提问于 2013-06-03 19:25:47
回答 2查看 2.9K关注 0票数 12

有没有人知道如何正确地将scala的Future (2.10)转换为新的scalaz7未来?我知道可以通过scala Promise将scalaz future转换为scala Future,但不确定如何正确完成

例如

代码语言:javascript
复制
import scalaz.concurrent.{Future => Zuture}
import scala.concurrent.Future

我想要实现

代码语言:javascript
复制
implicit def scalaF2scalazF[A](in:Future[A]):Zuture[A]=???

那么写起来显然是小菜一碟。

代码语言:javascript
复制
implicit def scalaF2scalazTask[A](in:Future[A]):Task[A]=???

因为这才是我真正想要的:-)

EN

回答 2

Stack Overflow用户

发布于 2013-06-29 15:18:41

在评估了几个备选方案后,我得出了以下解决方案。显然,如果有人想要scalaz.Monad[scala.concurrent.Future]scalaz.std.scalaFuture https://github.com/scalaz/scalaz/blob/series/7.2.x/core/src/main/scala/scalaz/std/Future.scala#L85是最好的选择。

代码语言:javascript
复制
object ScalaFutureConverters {


  implicit def scalaFuture2scalazTask[T](fut: Future[T])(implicit ec: ExecutionContext): Task[T] = {
    Task.async {
      register =>
        fut.onComplete {
          case Success(v) => register(v.right)
          case Failure(ex) => register(ex.left)
        }
    }
  }


  implicit def scalazTask2scalaFuture[T](task: Task[T]): Future[T] = {
    val p: Promise[T] = Promise()

    task.runAsync {
      case -\/(ex) => p.failure(ex)
      case \/-(r) => p.success(r)
    }

    p.future
  }


  implicit class ScalazFutureEnhancer[T](task: Task[T]) {
    def asScala: Future[T] = scalazTask2scalaFuture(task)
  }


  implicit def scalaF2EnhancedScalaF[T](fut: Future[T])(implicit ec: ExecutionContext): ScalaFEnhancer[T] =
    ScalaFEnhancer(fut)(ec)

  case class ScalaFEnhancer[T](fut: Future[T])(implicit ec: ExecutionContext) {
    def asTask: Task[T] = scalaFuture2scalazTask(fut)(ec)
  }

}

然而,这个解决方案也会在转换到scala未来之后运行任务,这可能是/可能不是所需的,这取决于情况。

票数 21
EN

Stack Overflow用户

发布于 2017-07-11 02:36:01

您还可以使用https://github.com/Verizon/delorean,它添加了方便的toTasktoFuture方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16895635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档