为什么 Future(Failure(new Exception)) returns 成功而不是失败?

Why Future(Failure(new Exception)) returns Success instead of failure?

我正在尝试以下操作并认为我会失败

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 处理程序不会被执行。