Reputation: 95
How to run in parallel the two different functions that returns different datatype?
Here we have fruitFutures, and primeFutures. How can I utilize the Await.result function?
val fruits = List("apple", "orange", "mango", "banana")
val primeNums = List(2,3,5,7,11)
def executeFruit(fruit: String): Try[String] = {
Try {
s"executed $fruit"
}
}
def executePrime(prime: Int): Try[Int] = {
Try {
prime * 2
}
}
val fruitFutures: List[Future[Try[String]]] = for {
fruit <- fruits
} yield {
Future {
executeFruit(fruit)
}
}
val primeFutures: List[Future[Try[Int]]] = for {
prime <- primeNums
} yield {
Future {
executePrime(prime)
}
}
val futureResults = Await.result(Future.sequence(???), Duration.Inf)
Upvotes: 1
Views: 318
Reputation: 36
You can try this:
val futureResults = for {
f <- Future.sequence(fruitFutures)
p <- Future.sequence(primeFutures)
} yield (f, p)
val (fruitResult, primeResult) =
Await.result(futureResults, Duration.Inf)
This will result:
List(Success(executed apple), Success(executed orange), Success(executed mango), Success(executed banana))
List(Success(4), Success(6), Success(10), Success(14), Success(22))
Upvotes: 2