我正在使用Play Framework 2.1.1与一个产生java.util.concurrent.Future结果的外部Java库。我使用scala future而不是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函数,像上面的代码一样返回连接作为future,但是不会通过get阻塞代码。我需要在函数中加入什么才能使它非阻塞。任何提示都将是极好的。