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