如何为Trait中的函数中定义的理解实现线程安全

时间:2019-07-18 06:17:43

标签: scala scalaz scala-cats

我定义了以下用于理解的功能。该功能在特征中定义

   def getCache(getData: () => EitherT[Future, Failure, V]):   EitherT[Future, Failure, V] =
    for {
      lastModified <-  lastModified.dbGet(CACHEKEY)
      currentData <- getFromCache(lastModified, getData)
      latestData <- getLatestData(lastModified, currentData, getData)
    } yield latestData

我尝试过

(1)在getCache函数级别使用synced关键字,但是多个线程仍在调用lastModified.dbGet(CACHEKEY)进行理解

   def getCache(getData: () => EitherT[Future, Failure, V]):   EitherT[Future, Failure, V] = AnyRef.synchronized {
..........

}

(2)我尝试了

      lastModified <-  AnyRef.synchronized { lastModified.dbGet(CACHEKEY)}

但是多个线程仍在调用lastModified.dbGet(CACHEKEY)进行理解

如何使此代码线程安全?

0 个答案:

没有答案