gpt4 book ai didi

Scala:用于 future 理解的 ExecutionContext

转载 作者:行者123 更新时间:2023-12-04 11:24:58 25 4
gpt4 key购买 nike

当我制作 future ,或应用类似 onSuccess 的方法和 map ,我可以为它们指定 ExecutionContext 。

例如,

val f = future {
// code
} executionContext

f.map(someFunction)(executionContext)

f onSuccess {
// code
} executionContext

但是,如果我使用 for-comprehension of future,如何为 yield 指定 ExecutionContext部分?

for {
f <- future1
g <- future2
} yield {
// code to be executed after future1 onSuccess and future2 onSuccess
// What ExecutionContext runs this code?
} // (executionContext) here does not work

而且,如果没有指定,什么 ExecutionContext 会在 yield 中运行代码?

编辑

好的。多亏了答案,我找到了一些东西。
如果我不定义或导入 隐式执行上下文 (如 Implicits.global ),
for-comprehension 无法编译。这意味着,for-comprehension 使用隐式的 ExecutionContext。

那么,如何在没有隐式 ExecutionContext 的情况下使用 for-comprehension,即如何指定?

最佳答案

ExecutionContext参数实际上是 implicit .这意味着您可以:

import scala.concurrent.ExecutionContext

implicit val context = ExecutionContext.fromExecutor(//etc)
for {
f <- future1
g <- future2
} yield {
// code to be executed after future1 onSuccess and future2 onSuccess
// What ExecutionContext runs this code?: the one above.
}

您还有一个默认值,即 scala.concurrent.ExecutionContext.Implicits.global .
它具有与运行机器上的处理器一样多的线程。

默认情况下,它不会被所有 Future 使用,您仍然需要导入它。

更新 : 如果你真的想指定,虽然不推荐,你可以打开 for yield
val combined = futureA.flatMap(x => futureB)(context)

关于Scala:用于 future 理解的 ExecutionContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21256615/

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