2017-09-03 1 views
0

나는이 수입이있는 스칼라 파일이어떻게 내가 기본을하지 사용하고 보장 할/글로벌 암시 적 맥락

import scala.concurrent.ExecutionContext.Implicits.global 

이것은 Future 나는 그 나의 방법에서 잘 작동을 사용하고 잘 작동 파일. 그러나 디스크 IO에 사용될 별도의 메서드를 만들었고 새로운 실행 컨텍스트가 있습니다. 이 메서드는이 컨텍스트를 사용하고 다른 메서드는 기본 컨텍스트를 계속 사용할 수 있습니다. 어떻게 보장하나요?

private def testContext():Future[Int] = { val system = ActorSystem.create() implicit val myexecutionContext = system.dispatchers.lookup("blocking-io-dispatcher.db-backup-context") Future{logger.error("inside my new thread pool wonderland");10}{myexecutionContext}

각 미래 호출의 끝에서이 같은 "myexecutionContext"을 지정하지 않고 방법이 있나요 다음과 같이 저는 현재 이렇게,이 방법은 향후 모든 통화에 대해 "myexecutionContext"를 사용 할 수 있습니까? 즉, 필자는 "testContext"메서드 내에서 매개 변수로 "myexecutionContext"를 반복해서 지정하고 싶지 않습니다. 어떻게해야합니까?

답변

3

myexecutionContexttestContext() 안에 지정할 필요가 없습니다. myexecutionContexttestContext() 안에 정의되어 있으며 메서드 외부로 가져온 global 컨텍스트보다 우선합니다. testContext()에 생성 된 Future은 모두 기본적으로 myexecutionContext을 사용합니다.

+0

내 메서드 안에 "암시 적"으로 선언했기 때문에이 작업이 수행됩니까? 만약''myexecutionContext''를''암시 적 val'' 대신에''val ..''으로 선언하면 어떻게 될까요? 또한 자신 만의 만족을 위해서''미래''를 실행하기 위해 어떤 풀이 사용되었는지 확인할 수있는 방법이 있습니까? – curiousengineer

+0

암시 적 매개 변수로 사용하려면 암시 ​​적 val로 선언해야합니다. 그렇지 않으면 전역 매개 변수가 사용됩니다. 확인을 위해 다음 질문을 참조하십시오. https://stackoverflow.com/questions/38517712/in-scala-is-there-a-way-to-tell-which-execution-context-you-are-running-in –

+0

예 도와 줘서 고마워, 우리가 자바에서하는 것처럼''Thread.currentThread.getName''을 똑같이했는데 내 컨텍스트의 이름을 얻고있다. 한 가지 마지막 질문은 내 로그에 단어 앞에 "default"라는 단어가 붙는 이유입니다. 여기에 로그에 보이는 내용이 있습니다. ''내 새 스레드 풀 원더 랜드 내부 및 컨텍스트는 default-blocking-io-dispatcher.db-backup-context-7'' – curiousengineer