1

我正在尝试为我的应用程序使用 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

Callback 是 AsyncMethodCallback 的一个实现,它除了打印结果之外什么都不做。我碰巧通过让线程在调用之间等待来解决它

long _t = System.currentTimeMillis();
while (System.currentTimeMillis() - _t < 500) {};

但是有没有一种更干净、更优雅的方式来做这件事,或者我可以用 AsyncMethodCallback 做一些改变?我在一些博客上读到:

while (cb.getResult() == null) {  }

getResult 是将结果保存在回调中,但这似乎也不优雅。

4

0 回答 0