2013-05-03 100 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