scala - scala 中的理解式半并行调用

标签 scala future scala-collections for-comprehension

我想在 seq 中进行第一个调用,然后使用 Scala 的 future 并行调用接下来的 10 个调用。我不想对 map 平面图或内部进行编程以进行理解,因为它们会增加不可读性。是否可以用一个来理解。

引用代码:

val fcaAndFplAccountDetails  = getFcaAndFplAccount(fplId)
def orgDetailsIO(orgId:Int)  = getOrgDetails(orgId)
def unbilledTxns(orgid: Int) = getUnbilledTxns(orgId)
for {
      accDetails   <- fcaAndFplAccountDetails
      orgDetails   <- orgDetailsIO(accDetails.orgId)
      unbilledTxns <- unbilledTxnsIO(accDetails.orgId)
      ... other calls that depend on org id
    } yield { ... further computations }

fcaAndFplAccountDetails 之后的调用可以在推导式内并行化吗?

最佳答案

也许在生成器后面有一个值定义,使用等号进行应该并行执行的调用

for {
  accDetails    <- fcaAndFplAccountDetails
  orgDetailsF   = orgDetailsIO(accDetails.orgId)
  unbilledTxnsF = unbilledTxnsIO(accDetails.orgId)
  orgDetails    <- orgDetailsF
  unbilledTxns  <- unbilledTxnsF 
} yield { ... further computations }

或用 Applicative 传达想法

import cats.implicits._

fcaAndFplAccountDetails.flatMap { accDetails =>
  (
    orgDetailsIO(accDetails.orgId),
    unbilledTxnsIO(accDetails.orgId)
  ).mapN((orgDetails, unbilledTxns) => {
    ... further computations  
  }
}

关于scala - scala 中的理解式半并行调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67737285/

相关文章:

scala - 我如何将 HashMap[T,Future[N]] 转换为 Future[HashMap[T,N]]

arrays - 尝试在 Scala 中声明特定大小的数组

java - 为什么 Scala 不能声明但 undefined variable ,而 Java 可以?

scala - 仅显示 DateTime 值的年月日

scala - 了解 reduceByKey 函数定义 Spark Scala

scala - 用于带有错误累积的异步处理的函数签名

java - Future.get() 和 InterruptedException 异步线程

api - 用于矢量化数值计算的最佳 Scala 集合类型

scala - 是否有 EnumSet/EnumMap 的 Scala 等价物?

scala - 如何修复错误 : "org.jetbrains.jps.incremental.scala.remote.ServerException java.lang.StackOverflowError"