我正在尝试为我的应用程序使用 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 是将结果保存在回调中,但这似乎也不优雅。