【发布时间】:2017-12-01 00:03:02
【问题描述】:
我有一个由akka-http 提供的 Rest API。在某些情况下,我需要从外部数据库 (Apache HBase) 获取数据,如果数据库传输数据的时间过长,我希望查询失败。
一种天真的方法是将调用包装在 Future 中,然后使用具有所需持续时间的 Await.result 阻止它。
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
object AsyncTest1 extends App {
val future = Future {
getMyDataFromDB()
}
val myData = Await.result(future, 100.millis)
}
这似乎是低效的,因为这个实现需要两个线程。有没有一种有效的方法来做到这一点?
我有另一个用例,我想并行发送多个查询,然后聚合结果,具有相同的延迟限制。
val future1 = Future {
getMyDataFromDB1()
}
val future2 = Future {
getMyDataFromDB2()
}
val foldedFuture = Future.fold(
Seq(future1, future2))(MyAggregatedData)(myAggregateFunction)
)
val myData = Await.result(foldedFuture, 100.millis)
同样的问题,最有效的实现方式是什么?
感谢您的帮助
【问题讨论】:
标签: scala concurrency