描述
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)
|
文章作者
duansheli
上次更新
2019-12-25
(325c7b3)