加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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) )
    }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读