代码之家  ›  专栏  ›  技术社区  ›  ses

getAsync(“key”)。get(timeout,sec)不等待,返回null

  •  0
  • ses  · 技术社区  · 9 年前

    Hazelcast 3.4.4。 我遇到了这样的情况 map.getAsync 不管怎样都返回null。即使超时设置为 10000000 , TimeUnit.SECONDS 它不需要等待。

    但如果我把 Thread.sleep(10000) 就在getAsync之前,它会从映射中返回正确的值。

    我想知道出了什么问题,我该如何检查/修复/修复它?

    更新 :如果我删除 import ExecutionContext.Implicit.global 从我的代码和所有依赖项(如 Scala.concurent.Future ),然后getAsync再次开始工作。但我仍然不满意。。。

    2 回复  |  直到 9 年前
        1
  •  2
  •   noctarius    9 年前

    对我来说,这感觉就像你希望它等待一个值被放入地图,不是吗?

    这并不意味着它将等待一个值变为可用,它只是为集群完全耗尽并且无法足够快地响应请求的情况提供了一个超时选项。

    事实上,我认为没有好的方法可以实现您所期望的目标,但您可以使用本地EntryListeners,等待密钥并通过主题转发事件,如果这有意义的话。您可能还需要Promise类型的实现。

        2
  •  0
  •   nilskp    9 年前

    不确定是否与3.4.4有关,但3.5.1有效(来自REPL):

    scala> import scala.concurrent._
    import scala.concurrent._
    
    scala> import ExecutionContext.Implicits.global
    import ExecutionContext.Implicits.global
    
    scala> val map = hz.getMap[String, Int]("map")
    map: com.hazelcast.core.IMap[String,Int] = IMap{name='map'}
    
    scala> map.set("one", 1)
    
    scala> map.getAsync("one").get()
    res4: Int = 1