アプリケーションにCassandra.AsyncClientを使用しようとしていますが、.set_keyspaceと.system_add_column_familyの2つの呼び出しがあります。スニペットは次のようになります。
Callback<Cassandra.AsyncClient.set_keyspace_call> c0 = new Callback<Cassandra.AsyncClient.set_keyspace_call>();
client.set_keyspace(this.keyspace, c0);
Callback<Cassandra.AsyncClient.system_add_column_family_call> c1 = new Callback<Cassandra.AsyncClient.system_add_column_family_call>();
client.system_add_column_family(cfDef, c1);
そして私は得た:
java.lang.IllegalStateException: Client is currently executing another method: org.apache.cassandra.thrift.Cassandra$AsyncClient$set_keyspace_call
コールバックはAsyncMethodCallbackの実装であり、結果を出力する以外は何もしません。呼び出しの間にスレッドを待機させることで、たまたまそれを回避します
long _t = System.currentTimeMillis();
while (System.currentTimeMillis() - _t < 500) {};
しかし、これを行うためのよりクリーンでエレガントな方法、またはAsyncMethodCallbackで実行できるある種のひねりはありますか?私はするためにいくつかのブログを読んだ:
while (cb.getResult() == null) { }
getResultはコールバックに結果を保存することですが、これもエレガントではないようです。