Scala Aplicativo não sair, mesmo que o Futuro é concluída

0

Pergunta

Eu aguardar um Futuro preencher e imprimir o conteúdo do console. Mesmo quando tudo estiver concluído, o aplicativo principal não sair e eu tenho que matá-lo manualmente.

def main(args: Array[String]): Unit {
    val req = HttpRequest(GET, myURL)
    val res = Http().singleRequest(req)
    val resultsFutures = Future {
        val resultString = Await.result(HttpRequests.unpackResponse(res), Duration.Inf)
        JsonMethods.parse(resultString).extract[List[Results]]
    }
    val results = Await.result(resultsFutures, Duration.Inf)
    println(results)
}

Então, results fica impresso no console com a expectativa de enfrentar, mas o aplicativo ainda não termina. Existe algo que eu possa fazer para sair da aplicação? Ainda existe algo em execução, que o principal está esperando?

Eu estou usando:

  • scala 2.12.10
  • akka 2.5.26
  • akkaHttp 10.1.11
akka akka-http concurrent.futures scala
2021-10-26 17:59:04
1

Melhor resposta

3

Como você está usando Akka, você provavelmente terá um ActorSystem instanciado, de alguma forma, sob a capa de que vai manter o processo em execução.

Ou você é capaz de obter uma mão sobre ela e chamar a sua actorSystem.terminate() o método, ou você também pode usar uma explícita sys.exit(0) no final de seu método main (0 sendo o código de saída que você deseja).

Editar: você deve também envolver o Awaits em Try e certifique-se chamar sys.exit em caso de falhas de bem.

2021-10-26 18:23:16

Sim, eu tenho um implicit val system: ActorSystem = ActorSystem() o objeto que está executando o principal.
Seb

Mudando-explícita val system: ActorSystem = ActorSystem(). Então eu chamei system.terminate() (.o encerramento está descontinuado), mas isto ainda não terminar a Aplicação. Existe uma outra forma de chamar sys.exit(0) como parece ataque de força bruta e deve haver uma intenção forma?
Seb

Erro meu, tinha que pegar todos implícito ActorSystems em todas as funções e resolvê-los, depois de terem terminado o seu trabalho. Bem feito, esse é o direito de resposta.
Seb

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................