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

Achilles Cassandra-获取条件更新的结果

  •  2
  • wittyameta  · 技术社区  · 8 年前

    从Achilles执行条件更新/删除时如何获得响应? 我尝试使用自定义ResultListener,但它并不总是正常工作。

    public class ResultListener implements LWTResultListener {
    
      private boolean applied;
    
      @Override
      public void onSuccess() {
         applied = true;
      }
    
      @Override
      public void onError(LWTResult lwtResult) {
        applied = false;
      }
    
      public boolean isApplied() {
        return applied;
      }
    }
    

    从我的主叫课,我打电话给 isApplied() 但是看起来 onSuccess 方法是异步调用的。调用方类没有看到 applied 字段。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Alex Ott    8 年前

    这不是Cassandra/Achilles本身的问题,但是异步编程的一般问题-回调可以在任何时候调用。。。

    对于你的代码有两件事:

    • 首先,您需要了解是否调用了回调-您可以添加另一个布尔变量,该变量将由 onSuccess &安培; onError 以指示已调用回调。您的代码需要在调用 isApplied ;
    • 第二,您需要确保代码的其他部分可以看到更改。您可以添加 volatile 声明的关键字 applied 变量(以及上述变量的声明)。此关键字将指示数据可能被其他线程更改,并且Java将强制始终从内存中读取数据。 Following article 详细描述了这一点。