5

我正在构建一个库,作为其功能的一部分,它发出 HTTP 请求。为了让它在将要部署的多个环境中工作,我希望它能够在有或没有 Futures 的情况下工作。

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

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

有没有办法从将在当前线程上执行的值创建 Future ,因此不会在无法生成线程的环境中引起问题?

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

4

2 回答 2

3

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

val p = Promise[Int]
p success 42
val f = p.future

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

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

于 2013-08-01T12:46:18.997 回答
1

看看Scalaz版本的 Future trait。这是基于 Trampoline 机制的顶部,它将由当前线程执行,除非forkapply不会被调用 + 完全删除所有 ExecutionContext 导入 =)

于 2013-08-01T13:26:18.770 回答