번호 :미래의 가치는 변수에 바인딩되었는지 여부에 달려 있습니다.
import scala.concurrent.Future
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global
/**
* Created by IDEA on 12/23/16.
*/
object Demo extends App {
val fut = Future {
Thread.sleep(100)
21 + 21
}
val f = Future { 5 }
Thread.sleep(200)
val fut1 = fut.map(_ + 1)
println(fut1) // Future(Success(43))
println(fut1.value) // Some(Success(43))
println(fut.map(_ + 1).value) // None
fut.map(_ + 1).onComplete {
case Success(v) => println(v)
case Failure(e) => println(e)
} // 43
(for {
x <- Future {Thread.sleep(100); 21 + 21}
y <- Future {Thread.sleep(100); 21 + 22}
} yield x + y).andThen {
case Success(v) => println(v)
}
Thread.sleep(5000)
}
참고 차이 : 직접적 None
제공 입수하면서
println(fut1.value) // Some(Success(43))
println(fut.map(_ + 1).value) // None
즉 변수에 할당 한 후에 미래의 값을 가져 오는 내게 Some(Success(43))
을 준다. 왜?
또한 println(fut.map(_ + 1).value)
줄 뒤에 호출되었지만 onComplete
메서드는 예상되는 동작을 생성합니다. 스칼라 2.12.0
메인 쓰레드를 잠자 게하면 내 컴퓨터에서 전혀 도움이되지 않는 것 같습니다. 스칼라 앱에서 이것을 확인할 수 있습니까? – qed
@qed : 무슨 뜻인지 모르겠습니다. '.map' 결과를 할당하지 않은'Thread.sleep'는 아무런 영향을 미치지 않으며, 그것을 할당하는 것은 질문과 모순됩니다. – Marth
제 편집을 참조하십시오. – qed