Cosa succede quando un attore di un futuro lancia un'eccezione?Akka Futures Exceptions
Secondo la documentazione Akka a http://doc.akka.io/docs/akka/snapshot/scala/futures.html:
Non importa se un attore o dello speditore sta completando l' futuro, se un'eccezione e 'colto in futuro conterrà invece di una valida risultato. Se un Futuro contiene un'eccezione, chiamando il numero Await.result verrà generato nuovamente in modo che possa essere gestito correttamente .
io non sono sicuro che questo è quello che sto vedendo durante l'esecuzione di questo pezzo di codice:
class Worker extends Actor {
def receive = {
case i: Int => throw new RuntimeException
}
}
implicit val system = ActorSystem("MySystem")
val worker = system.actorOf(Props(new Worker), name="worker")
implicit val timeout = Timeout(5 minutes)
val future = worker ? 0
val res = Await.result(future, 10 seconds)
In base alla documentazione, Await.result dovrebbe lanciare di nuovo l'eccezione, ma quello che sto ottenendo è un timeoutException! Qualcuno può chiarire su questo?
Grazie per il chiarimento. Il link che hai fornito è anche utile per chiarire l'interazione tra attori e futuro. Mi chiedo, basandomi sulla tua comprensione, trovi il mio riferimento sopra al futuro abbastanza preciso nel chiarire questa relazione? – deepkimo
No, vorrei che la documentazione fosse migliore. Il problema è che non si presume che gli attori restituiscano qualcosa al mittente, quindi non si sa mai se una domanda dovrebbe essere completata. Sarebbe bello se questo fosse meglio documentato, o se le domande fossero state appena eliminate e fosse stato implementato un meccanismo di ricezione degli invii completamente digitato. L'ambiguità degli attori non tipizzati è solo aggravata dall'ambiguità delle possibilità di risposta non tipizzate e completamente sconosciute. – Noah
È necessario? 'throw e // Avvisa qualsiasi attore supervisore dell'errore'. Supponiamo che l'errore sia dovuto a "password errata" per un attore di accesso. Avrebbe aiutato il supervisore? – Jus12