Anime Lover
Anime Lover

Reputation: 95

How to Run Different Functions in Parallel Scala

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

Answers (1)

nbsoluren
nbsoluren

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

Related Questions