我正在构建一个库,作为其功能的一部分,它发出 HTTP 请求。为了让它在将要部署的多个环境中工作,我希望它能够在有或没有 Futures 的情况下工作。
一种选择是让库参数化其响应的类型,这样您就可以创建一个带有 type 的库Future
实例或一个带有 type 的实例Id
,具体取决于您是否使用异步 HTTP 实现。(Id
可能是一个 Identity monad - 足以向用户公开一致的界面)
我已经开始使用这种方法,但它变得复杂了。我真正想做的是在任何地方使用 Future 类型,在必要时在 Future 中装箱同步响应。但是,我知道使用 Futures 总是需要某种线程池。这不会在例如 AppEngine(必需的环境)中运行。
有没有办法从将在当前线程上执行的值创建 Future ,因此不会在无法生成线程的环境中引起问题?
(ps 作为附加要求,我需要能够将库交叉构建回 Scala v2.9.1,这可能会限制 scala.concurrent 中可用的功能)