当我创建一个future,或者应用onSuccess和map之类的方法时,我可以为它们指定ExecutionContext。
例如,
val f = future {
// code
} executionContext
f.map(someFunction)(executionContext)
f onSuccess {
// code
} executionContext但是,如果我使用了对未来的理解,我如何为yield部件指定yield?
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运行代码呢?
编辑
好的。多亏了答案,我找到了一些东西。
如果我不定义或导入隐式(如Implicits.global),则不进行编译。这意味着,为了理解而使用隐式ExecutionContext.
那么,在没有隐式ExecutionContext的情况下,如何使用--理解,即如何指定?
发布于 2014-01-21 11:25:10
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。这有与正在运行的机器上的处理器一样多的线程。
默认情况下,它不会被所有的期货所使用,你仍然需要导入它。
更新:如果您真的想要专门化,尽管不推荐,您可以打开for yield
val combined = futureA.flatMap(x => futureB)(context)发布于 2014-01-21 11:26:16
由于for理解被“映射”到map/flatMap操作,而且这些操作的ExecutionContext参数是隐式的,所以我想您可以尝试在本地范围中添加implicit val:
implicit val myContext:ExecutionContext = ...
。
我不认为存在“默认”隐式ExecutionContext,但最常用的是ExecutionContext.Implicits.global。
https://stackoverflow.com/questions/21256615
复制相似问题