我玩手表的功能,并努力使它的工作。问题是,手表从不开火,它根本不对我在其他事务中为键所做的更改做出反应。
val key = new Tuple().add("watch-test").pack()
val watchExecuted = db.runAsync(tr => {
tr.set(key, new Tuple().add(1).pack())
tr.watch(key)
})
Thread.sleep(5000) // ensure that watch applied
db.run(tr => {
tr.set(key, new Tuple().add(2).pack())
})
watchExecuted.get() // never finish有谁知道为什么手表不像它应该做的那样对变化做出反应呢?
发布于 2018-11-26 22:40:02
我认为这里发生的是你的第一笔交易永远不会完成。从文档中可以看出这一点,但是在函数中返回的runAsync准备好之后,CompletableFuture才会返回。因为您正在返回手表未来,并且直到事务之后才更改值,所以它永远不会准备好,事务也永远不会结束。
如果您将runAsync替换为run,我认为它会起作用:
val watchExecuted = db.run(tr => {
tr.set(key, new Tuple().add(1).pack())
tr.watch(key)
})如果您想使用runAsync,那么您需要返回包装在另一个对象中的手表未来。
编辑:或者说,如果您想使用runAsync,可以返回一个CompletableFuture<CompletableFuture<Void>>
var watchExecuted = db.runAsync(tr => {
tr.set(key, new Tuple().add(1).pack())
CompletableFuture.completedFuture(tr.watch(key))
});https://stackoverflow.com/questions/53415446
复制相似问题