1

アプリケーションに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はコールバックに結果を保存することですが、これもエレガントではないようです。

4

0 に答える 0