【问题标题】:how to let scala's Future running on the current thread?如何让scala的Future在当前线程上运行?
【发布时间】:2016-05-09 14:42:05
【问题描述】:

我将scala.concurrent.ExecutionContext.Implicits.global 用于 Future 的所有执行者。但有时,我做了一件简单的事情,只是希望它不改变线程(不把它放到线程池中),让它继续在当前线程下运行。使用 twitter Future 有一个 Future.value 来实现这一点。 scala的未来怎么办?

【问题讨论】:

  • 如果你做简单的事情,你根本不需要未来。
  • @EndeNeu,简单的事情只是作品的一个分支。我必须构建一个未来以确保最终结果是Future
  • 您可以使用Future.successfulFuture.failed 来获得已经“完成”的Future。
  • @LoranceChen 好的,这是有道理的,这个问题有点误导,建议你应该使用Future.successful
  • @EndeNeu 非常感谢。 :)

标签: scala future


【解决方案1】:

你可以这样做:

Future.fromTry(Try { ... })

它不需要ExecutionContext,基本上只是立即计算表达式并在将来包装结果。

实际上,这是它的实现:

def fromTry[T](result: Try[T]): Future[T] = Promise.fromTry(result).future

所以这似乎是 Twitter 的 Future.value 的直接模拟。

如果您的代码不会引发任何异常,也可以考虑使用Future.successful;如果您想创建已经失败的未来,请考虑使用Future.failed

【讨论】:

    【解决方案2】:

    在 scala 标准库中 Twitter 的 Future.value 等价于 Future.successful

    Future.constFuture.fromTry

    Future.exceptionFuture.failed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多