我正在尝试将Cassandra.AsyncClient用于我的应用程序,我有两个调用.set_keyspace和.system_add_column_family。一个片段就是这样,
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是将结果保存在回调上,但这似乎也不优雅。