나는 다음과 같은 테스트 코드가 : 그것은 다음과 같은 출력을 생성스칼라 미래 블록 변환?
import scala.concurrent.{Await, Future}
import scala.concurrent.duration.Duration
import scala.util.Success
import scala.concurrent.ExecutionContext.Implicits.global
object FutureAndThen extends App {
val future = Future {
println("Started initial Future")
10
} andThen { case Success(value) =>
println("Started callback")
Thread.sleep(5000)
println(s"Finished callback: value = $value")
} map { x =>
println("Chained transformation")
x * 2
}
println(Await.result(future, Duration.Inf))
}
:
Started initial Future
Started callback
Finished callback: value = 10
Chained transformation
20
내가 andThen
콜백이 비동기 적으로 수행 될 것으로 기대합니다. 그러나 실제 실행은 다음과 같습니다
- 하는
- 이 비동기 콜백
- 실행 변환 (
map
)
는 처음에는이 문제가 ExecutionContext
에 있다고 생각 실행 원래의 미래를 실행하는 이 모든 작업을 단일 스레드로 실행하기로 결정했습니다.
implicit val ctx = ExecutionContext.fromExecutor(
(command: Runnable) => new Thread(command).start()
)
을 그리고 결과는 동일 : 그리고이 정의 ExecutionContext
사용하도록 변경. 제가 빠진 것에 대해 조언 해 주시겠습니까?
감사합니다. 이것은 정확하게 내가 어떻게 나의 문제를 해결했는지입니다. –