我想在 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/