在Scala中,有没有办法告诉您正在运行哪个执行上下文?

时间:2016-07-22 03:31:15

标签: scala concurrency

在Scala中,如果我知道一段代码在Future中运行,有没有办法找出Future所在的ExecutionContext?例如,我可以将这些信息写入日志。

不要担心,我不想做任何邪恶的事情。我只想要调试信息。

2 个答案:

答案 0 :(得分:2)

Viktor Klang在评论中说:

  

任何合理的ExecutionContext都应该适当地命名它的线程,   然后它使用Thread.currentThread()。getName()。

显示在日志中

我认为这正是我所需要的。

谢谢,Viktor!

答案 1 :(得分:1)

不清楚你想要什么,但如果你想在implicit上下文中获得Future变量,你可以这样做:

  def main(args: Array[String]): Unit = {
    helloWorld()
    fooBar()
  }
  def fooBar(): Unit = {
    import scala.concurrent.ExecutionContext.Implicits.global
    Future {
      println(implicitly[ExecutionContext].hashCode())
      "foo bar"
    }
  }
  def helloWorld(): Unit = {
    implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
    Future {
      println(implicitly[ExecutionContext].hashCode())
      "Hello World"
    }
  }

使用implicitly类型implicit来获取implicit变量。