首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:未来理解的ExecutionContext

Scala:未来理解的ExecutionContext
EN

Stack Overflow用户
提问于 2014-01-21 11:19:32
回答 2查看 3.9K关注 0票数 7

当我创建一个future,或者应用onSuccessmap之类的方法时,我可以为它们指定ExecutionContext。

例如,

代码语言:javascript
复制
val f = future {
  // code
} executionContext

f.map(someFunction)(executionContext)

f onSuccess {
  // code
} executionContext

但是,如果我使用了对未来的理解,我如何为yield部件指定yield

代码语言:javascript
复制
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的情况下,如何使用--理解,即如何指定?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-21 11:25:10

ExecutionContext参数实际上是implicit。这意味着你可以:

代码语言:javascript
复制
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

代码语言:javascript
复制
val combined = futureA.flatMap(x => futureB)(context)
票数 9
EN

Stack Overflow用户

发布于 2014-01-21 11:26:16

由于for理解被“映射”到map/flatMap操作,而且这些操作的ExecutionContext参数是隐式的,所以我想您可以尝试在本地范围中添加implicit val

implicit val myContext:ExecutionContext = ...

我不认为存在“默认”隐式ExecutionContext,但最常用的是ExecutionContext.Implicits.global

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21256615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档