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

  • 相关阅读:
    c#装箱和拆箱
    C#数组,ArrayList,List
    Cocos Creator_发布到微信小游戏平台
    unity游戏设计与实现 --读书笔记(一)
    Cocos Creator存储和读取用户数据--官方文档
    C
    233 Matrix 矩阵快速幂
    数学 找规律 Jzzhu and Sequences
    A. Treasure Hunt Codeforces 线性代数
    POJ 2688 Cleaning Robot (BFS+DFS)
  • 原文地址:https://www.cnblogs.com/xinsheng/p/4419905.html
Copyright © 2011-2022 走看看