getAsync("key").get(timeout, sec) 不等待,return null

getAsync("key").get(timeout, sec) doesn't wait, return null

Hazelcast 3.4.4。 无论如何,我都会遇到 map.getAsync returns null 的情况。即使超时设置为 10000000TimeUnit.SECONDS 它也不会等待。

但是如果我把 Thread.sleep(10000) 放在 getAsync 之前,那么它 returns 来自地图的正确值。

我想知道出了什么问题,我怎么能check/fix/undersand呢?

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

对我来说,感觉就像您希望它等到值被放入地图,不是吗?

这并不意味着它会等到某个值可用,它只是让您可以选择超时,以防集群完全耗尽并且无法足够快地响应您的请求。

我实际上认为没有很好的方法来实现您正在寻找的东西,但您可以使用本地 EntryListeners,等待键并通过主题转发事件,如果这有意义的话。您可能还需要 Promise 类型的实现。

不确定 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