当前位置: 首页 > 知识库问答 >
问题:

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

杨昆
2023-03-14

我正在尝试以下方法,并认为我会失败

val failure = Future { Failure(new Exception) }

但是我却得到了

Future(Success(Failure(java.lang.Exception)))

有人能回答为什么吗?

共有1个答案

商业
2023-03-14

Future.failed可以创建一个失败的未来,例如

Future.failed(new Exception)

或者把它扔进未来

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)

因此< code>Future(x)是一个成功的未来,原因与< code>Future(y)是一个成功的未来相同。

您可以将< code>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处理程序。

 类似资料:
  • 执行器服务具有以下方法: 将来的 但是,由于这个<code>未来</code>的<code>get</code>方法将始终返回<code>null</code>以下签名是否更合适? <代码>未来

  • 问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么

  • 问题内容: 为什么不: 代替: 获得唯一哈希码的更高机会? 问题答案: 因为数组的最大长度为。 由于的主要用途是确定将对象插入/ 的后备数组中的哪个插槽,因此hashcode> 将无法存储在该数组中。

  • 问题内容: 有人可以解释为什么我想要的结果“ hi”以字母“ b”开头并以换行符开头吗? 我正在使用 Python 3.3 如果我使用python 2.7运行此额外的“ b”,则不会出现 问题答案: 默认情况下,echo命令返回换行符 与此比较: 至于字符串前面的 b ,则表明它是一个字节序列,等效于Python 2.6+中的常规字符串 http://docs.python.org/3/refer

  • 我已经能够验证是否会产生排序的。但是,它不会返回列表。为什么?

  • 为什么以下输出为True? 这将始终输出,即使条件似乎表明并非如此。如果我删除括号,那么它可以工作,但我不明白为什么。