Контекст выполнения не отключается - PullRequest
0 голосов
/ 06 апреля 2020

Я столкнулся со странной проблемой, когда контекст выполнения не закрывается. Я пытался с или без ожидания.


  import scala.concurrent.ExecutionContext

  val customExecutor: ExecutorService =
    Executors.newFixedThreadPool(serviceConfig.serviceConf.numberOfThreads)
  implicit val customExecutionContext: ExecutionContext =
    ExecutionContext.fromExecutorService(
      Executors.newFixedThreadPool(10)
    )

    futureCall() map { result =>
      import java.util.concurrent.TimeUnit

      customExecutor.shutdown()

      customExecutor.awaitTermination(60, TimeUnit.SECONDS)  
    } 


1 Ответ

3 голосов
/ 06 апреля 2020

Вы ожидаете завершения работы внутри потока, но исполнитель не может завершить работу во время работы потока, поэтому это не произойдет. Поэтому переместите awaitTermination за пределы функции map.

Однако реальная проблема заключается в том, что вы создаете два ExecutorService s и останавливаете неправильный. Если вы просто передадите созданный вами сервис, он будет завершен, как и ожидалось:

val customExecutor: ExecutorService =
  Executors.newFixedThreadPool(10)

implicit val customExecutionContext: ExecutionContext =
  ExecutionContext.fromExecutorService(customExecutor)

futureCall() map { result =>
  customExecutor.shutdown()
} 

customExecutor.awaitTermination(5, TimeUnit.SECONDS)
...