在斯卡拉,有没有办法告诉你正在运行哪个执行上下文?
问题描述:
在Scala中,如果我知道一段代码正在未来运行,有没有办法找出未来驻留在哪个ExecutionContext中?例如,以便我可以将这些信息写入日志。在斯卡拉,有没有办法告诉你正在运行哪个执行上下文?
别担心,我不想做任何邪恶的事情。我只是想要调试的信息。
答
维克托·巴生过这样的评论说:
任何明智的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"
}
}
使用implicitly与implicit
类型,以获得implicit
变量。
+0
感谢您的帮助。这是有用的信息。不幸的是,它不适合我。您的解决方案只能在“Future”构造函数的主体中使用。在我想做的地方,日志记录是在一个由“Future”构造函数创建的线程运行的函数内,但是当我们处于所讨论的函数体内时,未来的构造早已不复存在。 (也许我可以只记录一个堆栈跟踪,这将有足够的信息?但是,这似乎有点嘈杂和笨拙。) – Douglas
任何明智的ExecutionContext都应该适当地命名它的线程,然后使用Thread.currebtThread()显示在日志中。getName() –
谢谢Victor!我会试试看。 – Douglas