【发布时间】:2018-07-20 10:33:08
【问题描述】:
我第一次开始使用 Scala Futures。我对非阻塞(即不是Await.Result)解决方案感兴趣,以便在我运行一些异步数据库查询时保持我的主线程处于活动状态。使用到目前为止我找到的有关回调的信息,我整理了类似的内容。
def miniFuturesExample(conn: DatabaseConnection)
{
val f1 = Future { runQuery(conn) }
f1.onComplete
{
case Success(result) => println(result.next())
case Failure(e) => e.printStackTrace()
}
// do some other stuff
Thread.sleep(2000)
}
我希望避免为Thread.sleep 指定时间值。我不想硬编码的原因是因为我并不总是确定runQuery 方法需要多长时间才能完成。我想找到一个非阻塞解决方案来保持主线程处于活动状态,直到触发 f1 的 onComplete 块。
【问题讨论】:
-
在致电
Await.Result之前,您可以做任何您想做的事情,这听起来是sleep的合理替代方案。您想避免阻塞的原因是什么?我也会调用sleep阻塞 - 当它处于睡眠状态时,你没有在线程上做任何事情。你能再展示一些你想同时执行的代码吗? -
我认为你在这里有一个根本的矛盾。你说你想要一个非阻塞的方式让主线程阻塞直到另一个线程完成。
-
是的,你是对的 :)
标签: scala