作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
阅读Play-Slick DBAction code ,我认为这段代码可能包含竞争条件:
object DBAction{
// snip
def apply(r: (RequestWithDbSession) => Result)(implicit app:Application) = {
Action { implicit request =>
AsyncResult {
DB.withSession{ s:scala.slick.session.Session =>
Future(r( RequestWithDbSession(request,s) ))(executionContext)
}
}
}
}
函数r
在未来某个时间运行,在withSession
返回Future[Result]并调用session.close()
之后。此代码中是否存在竞争条件?
最佳答案
我不确定这是否称为竞争条件。然而对我来说,你似乎认为这里出了问题是正确的。当将来执行代码时, session 可能不再有效。
最好反转执行并从将来请求数据库 session :
Async {
Future {
DB.withSession{ s:scala.slick.session.Session =>
r( RequestWithDbSession(request, s) )
}
}
}
关于scala - 发挥光滑和异步 - 这是一个竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579684/
在 Play 1.x 中有很棒的 play Idealize(和 play eclipsify),它为您最喜欢的 IDE 中的 Play 项目准备了项目文件。 我看到这是在 Play 2.X 中删除的
我是一名优秀的程序员,十分优秀!