Я думаю, что здесь происходит то, что ваша первая транзакция никогда не завершается.Возможно, это не очевидно из документации, но 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))
});