在Scala中,Future和Promise是用來處理異步編程的重要工具。Future代表一個異步計算的結果,而Promise用于產生這個結果。下面是一個簡單的示例,演示如何使用Future和Promise進行異步編程:
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.{Future, Promise}
// 創建一個Promise對象
val promise = Promise[Int]()
// 獲取Promise的Future對象
val futureResult = promise.future
// 在Future中定義異步計算任務
val asyncTask = Future {
// 模擬一個耗時的計算任務
Thread.sleep(1000)
42
}
// 將異步計算任務的結果傳遞給Promise
asyncTask.onComplete {
case scala.util.Success(result) => promise.success(result)
case scala.util.Failure(ex) => promise.failure(ex)
}
// 在Future中處理異步計算任務的結果
futureResult.onComplete {
case scala.util.Success(result) => println(s"異步計算結果為: $result")
case scala.util.Failure(ex) => println(s"異步計算失敗: ${ex.getMessage}")
}
// 阻塞等待異步計算結果
//futureResult.foreach(result => println(s"Final result: $result"))
// 輸出:
// 異步計算結果為: 42
在這個示例中,我們首先創建了一個Promise對象,并通過其future()方法獲取與此Promise相關聯的Future對象。然后,我們在一個單獨的Future中定義了一個模擬的異步計算任務asyncTask,當計算完成時,將結果傳遞給Promise對象。最后,我們在future()方法返回的Future對象上使用onComplete方法處理異步計算任務的結果。
需要注意的是,Future和Promise之間是相互關聯的,Promise用于產生異步計算的結果,而Future用于表示這個結果。在實際的異步編程中,我們通常會在Future中定義異步任務,并在Promise中傳遞計算結果。