Scala Aplicație nu ieși chiar dacă Viitorul este finalizată

0

Problema

Nu așteptați pentru un Viitor să completeze și să imprimați conținutul de pe consola. Chiar și atunci când totul este terminat, cererea principală nu are ieșire și am să-l omoare manual.

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

Deci results se tipareste pe consola cu temperatura susțin, dar aplicația încă nu-i sfârșitul. Este ceva ce pot face pentru a ieși din aplicație? Există încă ceva funcționare, care principalul este în așteptare pentru?

Eu sunt, folosind:

  • 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

Cel mai bun răspuns

3

Ca tine sunt utilizați Akka, aveți probabil o ActorSystem instanțiată cumva sub capota, care va ține procesul de funcționare.

Fie ca sunt capabil de a obține o mână pe ea și de apel actorSystem.terminate() metoda, sau puteți utiliza, de asemenea, în mod explicit sys.exit(0) la sfârșitul principala metodă (0 fiind codul de ieșire vrei).

Edit: ar trebui, de asemenea, înfășurați Awaitîn Try și asigurați-vă că pentru a apela sys.exit în caz de defecțiuni la fel de bine.

2021-10-26 18:23:16

Da, am o implicit val system: ActorSystem = ActorSystem() în obiectul pe care se execută principal.
Seb

Schimbarea aceasta de explicit val system: ActorSystem = ActorSystem(). Apoi am sunat system.terminate() (.shutdown este învechită), dar acest lucru încă nu se termină Aplicația. Există o altă cale decât de asteptare sys.exit(0) ca se pare brută forțată și ar trebui să fie un modul destinat?
Seb

Greseala mea, am avut pentru a prinde toate implicită ActorSystems în toate funcțiile și du-le după ce au terminat treaba lor. Bine făcut, acesta este răspunsul corect.
Seb

În alte limbi

Această pagină este în alte limbi

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