我工作的项目使用astyanax驱动程序访问Cassandra。我想实现一个异步操作:
MutationBatch m;
//…
ListenableFuture<OperationResult<Void>> lf = m.executeAsync();
lf.addListener(myRunnableCallback, myExecutor);
问题:假设在executeAsync()
调用中没有立即抛出异常,我该如何区分成功和失败的执行?
我能想到的唯一方法是,当调用完成回调时,lf.get()
会在出现故障时抛出异常。如果这是正确的方式,那么astyanax来源中是否有一个或多个文件证实了这一点?
答案 0 :(得分:1)
我找到了一种解决方法:我可以使用ListenableFuture
代替addListener
Runnable
方法Futures.addCallback(ListenableFuture<V>, FutureCallback<V>, Executor)
参数FutureCallback
。 onSuccess
有两种方法:onFailure
和{{1}}。这解决了我的问题。
https://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained