在Scala中,如果我知道一段代碼正在未來運行,有沒有辦法找出未來駐留在哪個ExecutionContext中?例如,以便我可以將這些信息寫入日誌。在斯卡拉,有沒有辦法告訴你正在運行哪個執行上下文?
別擔心,我不想做任何邪惡的事情。我只是想要調試的信息。
在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
變量。
感謝您的幫助。這是有用的信息。不幸的是,它不適合我。您的解決方案只能在「Future」構造函數的主體中使用。在我想做的地方,日誌記錄是在一個由「Future」構造函數創建的線程運行的函數內,但是當我們處於所討論的函數體內時,未來的構造早已不復存在。 (也許我可以只記錄一個堆棧跟蹤,這將有足夠的信息?但是,這似乎有點嘈雜和笨拙。) – Douglas
任何明智的ExecutionContext都應該適當地命名它的線程,然後使用Thread.currebtThread()顯示在日誌中。getName() –
謝謝Victor!我會試試看。 – Douglas