【问题标题】:Play slick and Async - is it a race condition?Play slick and Async - 这是一个竞争条件吗?
【发布时间】:2013-09-02 19:28:36
【问题描述】:

阅读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() 之后。此代码中是否存在竞争条件?

【问题讨论】:

    标签: scala playframework play-slick


    【解决方案1】:

    我不确定这是否称为竞争条件。但是对我来说,您似乎是正确的,这里有问题。将来执行代码时,会话可能不再有效。

    最好在将来反转执行并请求数据库会话:

    Async {
      Future {
        DB.withSession{ s:scala.slick.session.Session =>
          r( RequestWithDbSession(request, s) )
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      我认为你是对的,EECOLOR 建议的修复看起来是正确的。我们正在通过工单跟踪此问题:https://github.com/freekh/play-slick/issues/81

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多