我發現想未來的最好辦法就是一個框,會在某一時刻,包含你想要的東西。 Future的關鍵在於你永遠不會打開盒子。試圖強行打開盒子會導致你阻塞和悲傷。相反,您將未來放在另一個更大的盒子中,通常使用地圖方法。
下面是包含字符串的Future的示例。未來完成時,然後控制檯。println被稱爲:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
object Main {
def main(args:Array[String]) : Unit = {
val stringFuture: Future[String] = Future.successful("hello world!")
stringFuture.map {
someString =>
// if you use .foreach you avoid creating an extra Future, but we are proving
// the concept here...
Console.println(someString)
}
}
}
請注意,在這種情況下,我們調用主要方法,然後...完成。字符串的Future由全局ExecutionContext提供,它執行調用Console.println的工作。這很好,因爲當我們放棄對someString將要到達的位置進行控制時,並且在調用Console.println時,我們讓系統自行管理。在constrast,看看會發生什麼,當我們試圖強行開盒子:
val stringFuture: Future[String] = Future.successful("hello world!")
val someString = Future.await(stringFuture)
在這種情況下,我們不得不等待 - 保持一個線程擺弄了大拇指 - 直到我們得到someString回來。我們已經打開了這個盒子,但我們不得不征服系統的資源來解決它。
我的問題是 result.onComplete({ 成功的情況下(listInt)=> {// 做一些與我的名單 } 萬一出現故障(異常)=> {// 做一些與我的錯誤 }} ) 會有一些方法的一部分,我想返回listInt值。怎麼做 ? – user1822249
要麼返回自己,要麼阻塞,直到完成。 –
你想,我建議'VAL myListInt = result.result(10秒)'雖然注意超時異常... – Noah