【发布时间】:2013-06-17 09:57:35
【问题描述】:
我将 Play Framework 2.1.1 与一个生成 java.util.concurrent.Future 结果的外部 java 库一起使用。我使用的是 scala 未来而不是 Akka,我认为从 Play 2.1 开始这是正确的做法。如何将 java.util.concurrent.Future 包装到 scala.concurrent.Future 中,同时保持代码非阻塞?
def geConnection() : Connection = {
// blocking with get
connectionPool.getConnectionAsync().get(30000, TimeUnit.MILLISECONDS)
}
上面的代码返回一个连接,但是使用了一个get,所以它变成了阻塞
def getConnectionFuture() : Future[Connection] = {
future {
// how to remove blocking get and return a scala future?
connectionPool.getConnectionAsync().get(30000, TimeUnit.MILLISECONDS)
}
}
理想情况下,我想要一个 scala 函数,它可以像上面的代码一样将连接作为未来返回,但不会通过 get 阻塞代码。我还需要在函数中添加什么以使其非阻塞。
任何指针都会很棒。
【问题讨论】:
-
您使用的是哪个版本的 Scala?从 2.10.x 开始,Scala 采用了 Akka 的 Future 作为自己的。
-
Play 2.1.1 在幕后使用 Scala 2.10.0
标签: java scala concurrency playframework-2.1 future