我正在研究使用离线同步功能的azure-android。我必须同步多个表。目前我正在这样做,如下所示。对于每个表我称之为拉方法,目前我看到的是每一个都被逐一拉出。我想以异步方式执行此操作,我还需要等待所有表同步。
public void syncAsync(){
if (isNetworkAvailable()) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
mItemsTable.pull(mPullQuery_Items).get();
mCustomerTable.pull(mPullQuery_Customer).get();
mSalesTable.pull(mPullQuery_Sales).get();
//Few more tables to pull.
} catch (Exception exception) {
exception.printStackTrace();
}
finally {
}
return null;
}
}.execute();
} else {
//error
}
}
我看到Microsoft使用ListneableFuture并试图从
中读取一些信息我在链接
中看到了此代码示例列表&gt;查询; // 查询会转到所有不同的数据中心,但我们要等到它们全部完成或失败。
ListenableFuture<List<QueryResult>> successfulQueries = Futures.successfulAsList(queries);
Futures.addCallback(successfulQueries, callbackOnSuccessfulQueries);
我正在尝试更改我的代码,但我无法理解如何执行此操作。我想等到他们都完成了(所有桌子都拉了)并需要一个成功或失败的清单。由于我是Java的初学者,因此很难理解如何修改。
答案 0 :(得分:0)
@Nasir
函数successfulAsList
中给出的参数是ListenableFuture类型的varargs或包含ListenableFuture类型值的列表,请参阅http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/Futures.html#successfulAsList(com.google.common.util.concurrent.ListenableFuture...)。
所以你需要将进程mXxxTable.pull().get()
包装在一个对象实现接口Callable
作为接口submit
的函数ListeningExecutorService
的参数,以获得{{1}对于successAsList的一个varargs(或列表)的对象。
下面有一个测试演示作为参考。博客http://codingjunkie.net/google-guava-futures/解释了更多细节。
ListenableFuture