Future.failed
может создать неудачное будущее, например
Future.failed(new Exception)
или throw
внутри будущего
Future(throw new Exception)
или позвонить Future.fromTry
Future.fromTry(Failure(new Exception))
однако
Future(Failure(new Exception))
не представляет собой неудачное будущее, потому что
Failure(new Exception)
- это, несмотря на возможно вводящие в заблуждение имена, просто обычное значение, например
val x = Failure(new Exception)
val y = 42
Future(x)
Future(y)
, поэтому Future(x)
- это успешное будущее по той же причине, Future(y)
- успешное будущее.
Вы можете думать о Future
как о своего рода asyn c try-catch, поэтому, если вы не бросаете внутри try
try {
Failure(new Exception) // this is not a throw expression
} catch {
case exception => // so exception handler does not get executed
}
, обработчик catch не выполняется.