我有一個Future lazy val,它獲得一些提交未來操作的對象和函數。在創建的將來提交操作
class C {
def printLn(s: String) = println(s)
}
lazy val futureC: Future[C] = Future{Thread.sleep(3000); new C()}
def func(s: String): Unit = {
futureC.foreach{c => c.printLn(s)}
}
問題是,當Future未完成時,它以相反的順序執行操作。因此,舉例來說,如果我執行sequentialy
func("A")
func("B")
func("C")
未來完成
scala> C
B
A
這個命令是對我很重要之後,我得到。有沒有辦法保存這個命令?
當然,我可以使用一個演員,在將來還沒有準備好的時候,他會要求未來和存儲字符串,但對我來說似乎是多餘的。
執行的順序是隨機的,不僅僅是相反的。返回'A C B'給我。這取決於未來何時完成。如果執行必須是順序的,爲什麼要將其並行化。 – prayagupd
@prayagupd只是假設「futureC」返回Future(實際上它是演員詢問結果),並且我不想在方法「func」的第一次調用時阻止。 – Igor
@Igor,問題是,你在'func'的第一次調用中沒有阻塞。它恰好在最後完成。 – Dima