Я пробовал следующее и думал, что получу отказ
val failure = Future { Failure(new Exception) }
но вместо этого я получил
Future(Success(Failure(java.lang.Exception)))
Кто-нибудь может ответить, почему?
Я пробовал следующее и думал, что получу отказ
val failure = Future { Failure(new Exception) }
но вместо этого я получил
Future(Success(Failure(java.lang.Exception)))
Кто-нибудь может ответить, почему?
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
как о своего рода асинхронном try-catch, поэтому, если вы не бросаете внутри try
try {
Failure(new Exception) // this is not a throw expression
} catch {
case exception => // so exception handler does not get executed
}
то обработчик catch не выполняется.
failure
что-то вроде Future[Try[Nothing]], поэтому это будущее попытки, в данном случае — успешное будущее неудачной попытки. Обратите внимание, что будущее попытки редко имеет смысл. - person Luis Miguel Mejía Suárez   schedule 13.07.2020