【问题标题】:How to Run Different Functions in Parallel Scala如何在并行 Scala 中运行不同的函数
【发布时间】:2021-06-27 04:50:21
【问题描述】:

如何并行运行返回不同数据类型的两个不同函数?

这里有fruitFutures 和primeFutures。如何使用 Await.result 函数?

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)

【问题讨论】:

  • future.sequence(fruitFuture ++ primeFuture).map( //做你的事)
  • 谢谢,但它给了我Product with Serializable,所以不知道如何使用它。
  • Future[Try[..]] 说不通

标签: scala future


【解决方案1】:

你可以试试这个:

    val futureResults = for {
      f <- Future.sequence(fruitFutures)
      p <- Future.sequence(primeFutures)
    } yield (f, p)
    val (fruitResult, primeResult) =
      Await.result(futureResults, Duration.Inf)

这将导致:

List(Success(executed apple), Success(executed orange), Success(executed mango), Success(executed banana))
List(Success(4), Success(6), Success(10), Success(14), Success(22))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2019-12-30
    • 2014-10-29
    相关资源
    最近更新 更多