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,即如何指定?
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)