在Scala中,返回Future.failed(new Exception("message!"))和throw new Exception("message!")?之间的区别是什么?
假设这是在要返回的函数中发生的Future[Unit],并且调用函数是这样的:
someFunction onFailure {
case ex: Exception => log("Some exception was thrown")
}
Run Code Online (Sandbox Code Playgroud)
是否有一个优先于另一个或每个特定用例?
Ben*_*ich 11
调用Future { throw ex }和Future.failed(ex)将创建一个相同的结果.但是,使用Future.failed效率更高.如果我们从Future.apply(来自此处)中查看此片段:
promise complete {
try Success(body) catch { case NonFatal(e) => Failure(e) }
}
Run Code Online (Sandbox Code Playgroud)
我们注意到(正如可以预料的那样),它依赖于一个try...catch块.与普通代码相比,这些已知会带来很大的开销.该Future.failed方法本质上是一个快捷方式,而不必承担实际抛出异常的成本.
| 归档时间: |
|
| 查看次数: |
6762 次 |
| 最近记录: |