Syncronous Scala Future没有单独的线程

ada*_*ish 5 scala future threadpool

我正在构建一个库,作为其功能的一部分,它发出HTTP请求.为了让它在多种环境中工作,它将被部署,我希望能够使用或不使用Futures.

一种选择是让库参数化其响应的类型,以便您可以使用类型Future或具有类型的实例创建库的实例Id,具体取决于您是否使用异步HTTP实现.(Id可能是一个Identity monad - 足以向用户公开一致的接口)

我已经开始采用这种方法,但它已经变得复杂了.我真正想要做的是在任何地方使用Future类型,在必要时在Future中装箱同步响应.但是,据我所知,使用Futures总是需要某种线程池.这不会在例如AppEngine(必需的环境)中飞行.

有没有办法从将在当前线程上执行的值创建Future,从而在不可能生成线程的环境中不会导致问题?

(ps作为附加要求,我需要能够将库交叉构建回Scala v2.9.1,这可能会限制scala.concurrent中可用的功能)

Jat*_*tin 3

据我了解,您希望执行某些操作,然后用 包装结果Future。在这种情况下,您可以随时使用Promise

val p = Promise[Int]
p success 42
val f = p.future
Run Code Online (Sandbox Code Playgroud)

因此,您现在有一个future包含最终值的包装器42

Promise在这里得到了很好的解释。

  • Future 对象包含一个更简洁的方法:“Future success 42” (4认同)
  • 此外,Promise 对象还包含一个更简洁的方法:“Promise.successful(42).future”。 (3认同)