当前位置: 首页 > 知识库问答 >
问题:

Scala:ExecutionContext for future for

冀弘厚
2023-03-14
scala prettyprint-override">val f = future {
  // code
} executionContext

f.map(someFunction)(executionContext)

f onSuccess {
  // code
} executionContext

但是,如果使用future的for-complementation,如何为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方式运行代码?

好的。感谢回答,我发现了一些东西。
如果我不定义或导入隐式ExecutionContext(像implicits.global),for-complementsion将无法编译。这意味着,for-complementation使用隐式executionContext。

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

共有1个答案

温亮
2023-03-14

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。它的线程数与运行机器上的处理器数一样多。

默认情况下它不会被所有期货使用,你还是要导入它。

val combined = futureA.flatMap(x => futureB)(context)
 类似资料:

相关问答

相关文章

相关阅读