2016-07-22 43 views
1

在Scala中,如果我知道一段代碼正在未來運行,有沒有辦法找出未來駐留在哪個ExecutionContext中?例如,以便我可以將這些信息寫入日誌。在斯卡拉,有沒有辦法告訴你正在運行哪個執行上下文?

別擔心,我不想做任何邪惡的事情。我只是想要調試的信息。

+3

任何明智的ExecutionContext都應該適當地命名它的線程,然後使用Thread.currebtThread()顯示在日誌中。getName() –

+0

謝謝Victor!我會試試看。 – Douglas

回答

1

維克托·巴生過這樣的評論說:

任何明智的ExecutionContext應該適當命名它的線程,然後 它顯示了在使用Thread.currentThread日誌()的getName()。

我認爲這正是我所需要的。

謝謝,Viktor!

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

使用implicitlyimplicit類型,以獲得implicit變量。

+0

感謝您的幫助。這是有用的信息。不幸的是,它不適合我。您的解決方案只能在「Future」構造函數的主體中使用。在我想做的地方,日誌記錄是在一個由「Future」構造函數創建的線程運行的函數內,但是當我們處於所討論的函數體內時,未來的構造早已不復存在。 (也許我可以只記錄一個堆棧跟蹤,這將有足夠的信息?但是,這似乎有點嘈雜和笨拙。) – Douglas

相關問題