【问题标题】:In Scala, is there a way to tell which execution context you are running in?在 Scala 中,有没有办法判断您在哪个执行上下文中运行?
【发布时间】:2016-07-22 03:31:14
【问题描述】:

在 Scala 中,如果我知道一段代码在 Future 中运行,有没有办法找出 Future 驻留在哪个 ExecutionContext 中?例如,以便我可以将此信息写入日志。

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

【问题讨论】:

  • 任何合理的 ExecutionContext 都应该适当地命名其线程,然后使用 Thread.currebtThread().getName() 显示在日志中
  • 谢谢维克多!我会试试看。

标签: scala concurrency


【解决方案1】:

Viktor Klang 在评论中这样说:

任何明智的 ExecutionContext 都应该适当地命名它的线程, 然后它使用 Thread.currentThread().getName() 显示在日志中。

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

谢谢,维克多!

【讨论】:

    【解决方案2】:

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

      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"
        }
      }
    

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

    【讨论】:

    • 感谢您的帮助。这是有用的信息。不幸的是,它对我不起作用。您的解决方案只能在“Future”构造函数的主体内工作。我想要进行日志记录的地方是在一个由“未来”构造函数创建的线程运行的函数中,但是当我们进入相关函数的主体时,未来的构建早已不复存在。 (也许我可以只记录一个堆栈跟踪,这样就会有足够的信息?但这似乎有点嘈杂和笨拙。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2011-09-16
    相关资源
    最近更新 更多