http://docs.scala-lang.org/overviews/core/futures.html
In Eclipse the following Worksheet code can be executed based on the examples. You can run in a worksheet to see the async calls all come back at the same time.
import scala.concurrent._ import ExecutionContext.Implicits.global import scala.util.{Try,Success,Failure} object Actors { println("Actors----") val r = scala.util.Random def getAmount(): Int = { Thread.sleep(3000) r.nextInt(10) } println("Lets do three getAmount which take 3 seconds each") val f1: Future[Int] = future { getAmount() } val f2: Future[Int] = future { getAmount() } val f3: Future[Int] = future { getAmount() } println("OnComplete starts") f1 onComplete { case Success(ans) => println(s"1.ASYNC COMPLETED : ${ans}") case Failure(t) => println(s"ERROR : ${t}") } f2 onComplete { case Success(ans) => println(s"2.ASYNC COMPLETED : ${ans}") case Failure(t) => println(s"ERROR : ${t}") } f3 onComplete { case Success(ans) => println(s"3.ASYNC COMPLETED : ${ans}") case Failure(t) => println(s"ERROR : ${t}") } println("Wait") Thread.sleep(4000) println("Wait Over") println("Doing syncronously takes long") println(getAmount()) println(getAmount()) println(getAmount()) println("Composition----Callback") val amount = future { getAmount() } Thread.sleep(4000) amount onSuccess { case a => val purchase = future { if (a >= 5) "BUY" else "SELL" } purchase onSuccess { case a => println(s"purchase [${a}]") } } Thread.sleep(1000) println("Composition----Map") val amount2 = future { getAmount() } Thread.sleep(4000) val purchase = amount2 map { a => if (a >= 5) "BUY" else "SELL" } purchase onSuccess { case a => println(s"purchase [${a}]") } println("End----") }
No comments:
Post a Comment