zoukankan      html  css  js  c++  java
  • scala akka Future 顺序执行 sequential execution

    对于 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

  • 相关阅读:
    BZOJ3473: 字符串
    BZOJ1088: [SCOI2005]扫雷Mine
    跪啃SAM
    BZOJ3932: [CQOI2015]任务查询系统
    BZOJ3545: [ONTAK2010]Peaks
    06.约束
    05.数据表的创建与简单操作
    04.数据库的创建
    安卓6.0后运行时权限封装
    OkGo使用缓存
  • 原文地址:https://www.cnblogs.com/xinsheng/p/4419905.html
Copyright © 2011-2022 走看看