在斯卡拉,有没有办法告诉你正在运行哪个执行上下文?

问题描述:

在Scala中,如果我知道一段代码正在未来运行,有没有办法找出未来驻留在哪个ExecutionContext中?例如,以便我可以将这些信息写入日志。在斯卡拉,有没有办法告诉你正在运行哪个执行上下文?

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

+3

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

+0

谢谢Victor!我会试试看。 – Douglas

维克托·巴生过这样的评论说:

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

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

谢谢,Viktor!

尚不清楚你想要什么,但如果你想获得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" 
    } 
    } 

使用implicitlyimplicit类型,以获得implicit变量。

+0

感谢您的帮助。这是有用的信息。不幸的是,它不适合我。您的解决方案只能在“Future”构造函数的主体中使用。在我想做的地方,日志记录是在一个由“Future”构造函数创建的线程运行的函数内,但是当我们处于所讨论的函数体内时,未来的构造早已不复存在。 (也许我可以只记录一个堆栈跟踪,这将有足够的信息?但是,这似乎有点嘈杂和笨拙。) – Douglas