描述

async是另一个jar包里的, 用来更简洁的处理 多个future之间的任务衔接
原理是以宏的方式编译代码 可以说是个二道贩子
相似的东西: java库的lombok

由于是二次编译,如果需要调试的话,可能会有问题,慎用。

简单上手

1
2
3
4
5
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-async_2.12</artifactId>
<version>0.9.7</version>
</dependency>

示例1

1
2
3
4
5
val f1 = async {
  val ff1 = async { println(11); true }
  val ff2 = async { println(22); 322 }
  if (await(ff1)) await(ff2) else 0
}

示例2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def slowCalcFuture: Future[Int] = Future {
TimeUnit.SECONDS.sleep(5)
11
}

val future1 = slowCalcFuture
val future2 = slowCalcFuture

def combined: Future[Int] = for {
  r1 <- future1
  r2 <- future2
} yield r1 + r2

示例3

1
2
3
4
5
def combined: Future[Int] = async {
  await(slowCalcFuture) + await(slowCalcFuture)
}

val x: Int = Await.result(combined, 10.seconds)