gpt4 book ai didi

Scala Futures 未并行运行

转载 作者:行者123 更新时间:2023-12-04 14:12:22 26 4
gpt4 key购买 nike

我有一个非常简单的 Maven spring MVC 项目,并在其中添加了 Scala。我希望以下三个 future 按预期同时执行。然而他们一个接一个地执行

val viewName: Future[String] = for {
profileSync <- Future { EmployeeLocalServiceUtil.syncProfileInformation() }
earningsSync <- Future { EmployeeLocalServiceUtil.syncEarnings() }
reimbursementSync <- Future { EmployeeLocalServiceUtil.syncReimbursements() }
} yield {
"employee/view"
}

我的机器有 4 个内核,我正在使用 scala.concurrent.ExecutionContext.Implicits.global语境。除此之外,没有任何配置可以阻止/启用 future 的并行执行。

最佳答案

理解只是语法糖,是 translated to flatMap like in Example 2 .

这意味着您的代码大致如下所示:

Future { ??? }.flatMap { profileSync =>
Future { ??? }.flatMap { earningsSync =>
Future { ??? }.map { reimbursementSync =>
// Able to access profileSync/earningsSync/reimbursementSync values.
"employee/view"
}
}
}

如您所见 Future s 仅在前一个完成后启动。要解决这个问题,首先开始您的 Future s 然后做理解:
val profileSyncFuture = Future {  EmployeeLocalServiceUtil.syncProfileInformation()      }
val earningsSyncFuture = Future { EmployeeLocalServiceUtil.syncEarnings() }
val reimbursementSyncFuture = Future { EmployeeLocalServiceUtil.syncReimbursements() }

val viewName: Future[String] = for {
profileSync <- profileSyncFuture
earningsSync <- earningsSyncFuture
reimbursementSync <- reimbursementSyncFuture
} yield {
"employee/view"
}

关于Scala Futures 未并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com