2013-05-03 107 views
3

我试图运行下面的将来基本代码斯卡拉 - 期货不运行

future { println("ssss")} onSuccess{ case _ => println("succ")} 

然而,当我运行的主要方法,没什么控制台打印系统退出几乎瞬间。我正在使用隐式的ExecutionContext。任何提示?

此代码:

val f = future(Await.ready(Promise().future, d.timeLeft)) 

    f.onSuccess { 
    case _ => println("hee") 
    } 

也立即退出....

+2

[斯卡拉2.10将来可能的错误(可能重复http://stackoverflow.com/问题/ 10565475 /可能bug-in-scala-2-10-未来) – Dylan 2013-05-03 12:23:12

回答

11

期货是在一个专用的线程池执行。如果你的主程序不等待未来,它将立即退出,未来将没有机会执行。 你可以做这里是使用Await在主程序阻塞主线程,直到将来执行:

def main(args: Array[String]) { 
    val fut = future { println("ssss")} 
    fut onSuccess{ case _ => println("succ")} 
    Await.result(fut) 
} 
+0

我基本上喜欢在Java中使用Future.get()阻塞Scala行为,这是使用Await实现的吗? – Bober02 2013-05-03 11:45:10

+0

是的,这将等待结果并将其返回(如果将来失败,则重新抛出异常)。 – 2013-05-03 11:47:32

+0

那么,如果OnSuccess运行在单独的线程上,并且在我们实际询问结果之前不传播结果,那么OnSuccess又有什么意义呢?我们可以简单地在主线程上询问结果,然后根据成功/失败执行,对不对? – Bober02 2013-05-03 12:55:31