scala – 播放光滑和异步 – 这是竞争条件吗?
发布时间:2020-12-16 09:50:04 所属栏目:安全 来源:网络整理
导读:阅读 Play-Slick DBAction code,我认为这段代码可能包含竞争条件: object DBAction{ // snip def apply(r: (RequestWithDbSession) = Result)(implicit app:Application) = { Action { implicit request = AsyncResult { DB.withSession{ s:scala.slick.ses
阅读
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) } } } } 在withSession返回Future [Result]之后,函数r将在未来运行,并调用session.close().这段代码中是否存在竞争条件? 解决方法
我不确定这是否称为竞争条件.但对我来说,似乎你说错了,这里有些不对劲.将来执行代码时,会话可能不再有效.
反转执行并从未来请求数据库会话会更好: Async { Future { DB.withSession{ s:scala.slick.session.Session => r( RequestWithDbSession(request,s) ) } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |