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

  • 相关阅读:
    JS替换字符串多余的空格符
    WebStorm2017.3.4版本 注册码
    使用$.getJSON()需要注意的地方
    45道CSS基础面试题(附答案)
    单机版搭建Hadoop环境图文教程详解
    Ubuntu下安装JDK图文详解
    VMtools安装以及设置
    Ubuntu 12.04中文输入法的安装
    Hadoop 学习之 FAQ
    java ant 命令大全
  • 原文地址:https://www.cnblogs.com/xinsheng/p/4419905.html
Copyright © 2011-2022 走看看