Scala的Future和Promise怎么用于異步編程

小億
90
2024-04-12 19:22:11

在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é)果。

0