如何让 scala 的 Future 运行 在当前线程上?

how to let scala's Future running on the current thread?

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

你可以这样做:

Future.fromTry(Try { ... })

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

实际上,这是它的实现:

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

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

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

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

Future.constFuture.fromTry

Future.exceptionFuture.failed