val f1: Future[List[Int]] = Future.traverse((1 to 10).toList) { i =>
Future { Thread.sleep(i * 100); i }
}
val f2: Future[List[Int]] = Future.traverse((11 to 20).toList) { i =>
Future { Thread.sleep(i * 100); i }
}
val f: Future[List[Int]] = Future.fold(List(f1, f2))(List(10)){ (total, v) => v ++: total }
f.onSuccess{ case result: List[Int] => println(result.sum) }
Await.ready(f, Duration.Inf)