【发布时间】:2018-02-07 11:40:24
【问题描述】:
我尝试使用实现异步查询 java-driver-async-queries。我正在修改 FutureCallback 中的列表,但似乎它不起作用 -
List<Product> products = new ArrayList<Product>();
for (// iterating over a Map) {
key = entry.getKey();
String query = "SELECT id,desc,category FROM products where id=?";
ResultSetFuture future = session.executeAsync(query, key);
Futures.addCallback(future,
new FutureCallback<ResultSet>() {
@Override public void onSuccess(ResultSet result) {
Row row = result.one();
if (row != null) {
Product product = new Product();
product.setId(row.getString("id"));
product.setDesc(row.getString("desc"));
product.setCategory(row.getString("category"));
products.add(product);
}
}
@Override public void onFailure(Throwable t) {
// log error
}
},
MoreExecutors.sameThreadExecutor()
);
}
System.out.println("Product List : " + products); // Not printing correct values. Sometimes print blank
还有其他方法吗?
根据我实施的 Mikhail Baksheev 回答,现在得到了正确的结果。
只是一个转折。我需要实现一些额外的逻辑。我想知道我是否可以使用 List<MyClass> 而不是 List<ResultSetFuture> 和 MyClass 作为 -
public class MyClass {
private Integer productCount;
private Integer stockCount;
private ResultSetFuture result;
}
然后在迭代时将 FutureList 设置为 -
ResultSetFuture result = session.executeAsync(query, key.get());
MyClass allResult = new MyClass();
allResult.setInCount(inCount);
allResult.setResult(result);
allResult.setSohCount(values.size() - inCount);
futuresList.add(allResult);
【问题讨论】:
-
“不工作”的定义是什么?发布预期行为和实际行为。
-
你不是在等待你的未来吗?看起来您创建了一堆期货并立即打印结果结构。 Result 结构尚未填充,因为大多数期货仍在进行中。
-
谢谢。什么是修正。有没有可以参考的代码示例?
标签: java cassandra datastax futuretask