码迷,mamicode.com
首页 > 其他好文 > 详细

scala akka Future 顺序执行 sequential execution

时间:2015-04-12 19:10:59      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

对于 A => B => C 这种 future 之间的操作,akka 默认会自动的按照顺序执行,但对于数据库操作来说,我们希望几个操作顺序执行,就需要使用语法来声明

 

有两种声明 future 先后关系的方法,第一种是 flatMap,第二种是 for

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.blocking
import scala.concurrent.duration._

def f(item: Int): Future[Unit] = Future{
  print("Waiting " + item + " seconds ...")
  Console.flush
  blocking{Thread.sleep((item seconds).toMillis)}
  println("Done")
}

val fSerial = f(4) flatMap(res1 => f(16)) flatMap(res2 => f(2)) flatMap(res3 => f(8))

fSerial.onComplete{case resTry => println("!!!! That‘s a wrap !!!! Success=" + resTry.isSuccess)}


val fSerial = for {res1 <- f(4); res2 <- f(16); res3 <- f(2); res4 <- f(8)} yield "Did It!"
fSerial.onComplete{case resTry => println("!!!! That‘s a wrap !!!! Success=" + resTry.isSuccess)}
 

for 可以理解为 flatMap 的语法糖,从写出来的 code 来看, for 更加清晰,直观

 

需要注意的一点是,不能将 iterator 和 future 放到一个 for 循环里,再一个 for 循环里,要么都是 iterator 要么都是 future

scala akka Future 顺序执行 sequential execution

标签:

原文地址:http://www.cnblogs.com/xinsheng/p/4419905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!