在Scala中,F(xiàn)uture和Promise可以用于異步編程。Future表示一個(gè)異步計(jì)算的結(jié)果,而Promise是Future的一個(gè)可寫(xiě)的版本,用于將結(jié)果寫(xiě)入Future中。
下面是一個(gè)簡(jiǎn)單的示例代碼,演示如何使用Future和Promise進(jìn)行異步編程:
import scala.concurrent.{Future, Promise}
import scala.concurrent.ExecutionContext.Implicits.global
// 創(chuàng)建一個(gè)Promise
val promise = Promise[Int]()
// 獲取Promise的Future
val future: Future[Int] = promise.future
// 在Future中定義異步任務(wù)
val asyncTask = Future {
// 模擬耗時(shí)操作
Thread.sleep(1000)
42
}
// 將異步任務(wù)的結(jié)果寫(xiě)入Promise中
asyncTask.onSuccess {
case result => promise.success(result)
}
// 在Future中處理異步任務(wù)的結(jié)果
future.onComplete {
case scala.util.Success(value) => println(s"Async task result: $value")
case scala.util.Failure(exception) => println(s"Async task failed with exception: $exception")
}
// 阻塞主線(xiàn)程,等待異步任務(wù)完成
Thread.sleep(2000)
在上面的示例中,我們首先創(chuàng)建了一個(gè)Promise,并通過(guò)promise.future
獲取了Promise的Future。然后我們定義了一個(gè)異步任務(wù)asyncTask
,并將其結(jié)果寫(xiě)入Promise中。最后我們通過(guò)future.onComplete
來(lái)處理異步任務(wù)的結(jié)果。
需要注意的是,F(xiàn)uture和Promise是線(xiàn)程安全的,可以在不同的線(xiàn)程中并發(fā)使用。在實(shí)際應(yīng)用中,我們可以將復(fù)雜的異步任務(wù)封裝成Future,并通過(guò)Promise來(lái)控制異步任務(wù)的執(zhí)行和結(jié)果。