在Cassandra.AsyncClient上顺序执行

时间:2013-03-07 16:44:29

标签: java asynchronous cassandra thrift

我正在尝试将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是将结果保存在回调上,但这似乎也不优雅。

0 个答案:

没有答案