use*_*167 4 scala future resource-cleanup
我想在完成后进行一些清理(如关闭数据库连接)Future。
目前我是这样实现的:
Future { ... } onComplete {
case Success(v) =>
// ...
conn.close()
case Failure(ex) =>
// ...
conn.close()
}
Run Code Online (Sandbox Code Playgroud)
有重复的代码,也很乏味。
对此有什么最佳实践吗?
由于conn.close()对成功和失败都执行相同的操作,因此可以考虑使用andThen像这样执行它作为副作用
Future { ... } andThen { _ => conn.close() }
Run Code Online (Sandbox Code Playgroud)
同样,使用onComplete我们可以做
Future { ... } onComplete { _ => conn.close() }
Run Code Online (Sandbox Code Playgroud)
之间的区别andThen,并onComplete是后者将返回Unit,那就是放弃的返回值Future。