0
Ich versuche zu verstehen, wie Futures mit Ausnahmen kombiniert werden können. Die Funktion FutureA gibt entweder eine Zukunft zurück oder löst eine Ausnahme aus. Wenn ich versuche, die Ausnahme zu fangen, passiert nichts. Warum das?Kombinieren von Futures und Ausnahmen
package test
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
object TestFutures extends App {
def futureA(x: Int) = Future {
if (x==1)
1
else
throw new Exception("there's an error")
}
try {
futureA(2)
}
catch {
case ex:Exception => println("an exception was thrown")
}
println("end")
Thread.sleep(15000)
}
Um genau zu sein, ist Ihre Beschreibung der Funktion futureâ ungenau. Die Funktion gibt eine Zukunft zurück, und diese Zukunft stellt entweder einen Wert oder eine Ausnahme dar. Eine Ausnahme, die im Körper der Zukunft ausgelöst wird, wird vom Aufrufer nicht gesehen, da dieser Code möglicherweise nicht einmal ausgeführt wurde, wenn FutureA zurückkehrt. –
ist das nicht der Grund, warum Sie 'recover' verwenden müssen, um die Ausnahme zu fangen? – ps0604
Nochmals sehr vorsichtig mit dem Wortlaut: 'recover' fängt die Ausnahme nicht ab,' Future.apply' fängt die Ausnahme ab. 'recover' sagt, welcher Wert der Future sein wird, wenn eine passende Ausnahme von' Future.apply' abgefangen wird. –