我正在尝试为 ListenableFutures 提供嵌套的回调层,如下所示:
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
ListenableFuture<A> futureA = service.submit(() -> a.doSomething());
Futures.addCallback(futureA, new FutureCallback<A>() {
@Override
public void onSuccess(A result) {
ListenableFuture<B> futureB = service.submit(() -> b.doSomething(result)
}
});
当 futureA
和 futureB
都完成时,如何添加回调?
这是一个简单的示例,但我正在寻找一个可能具有多层 ListenableFuture
的解决方案。
最佳答案
使用 allAsList
创建新的 future 可能是一种选择。 (我假设您不介意同时启动 a
和 b
。)
//No idea how A and B are related, so I assume Object
ListenableFuture<List<? extends Object>> futureAB = Futures.allAsList(futureA, futureB);
Futures.addCallback(futureAB, ...);
更新后:
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
ListenableFuture<A> futureA = service.submit(() -> a.doSomething());
Futures.addCallback(futureA, new FutureCallback<A>() {
@Override
public void onSuccess(final A result) {
ListenableFuture<B> futureB = service.submit(() -> b.doSomething(result);
Futures.addCallback(futureB, new FutureCallback<B>() {
©Override
public void onSuccess(final B resultB) {
//Do something with result and resultB.
}
});
}
});
关于java - 在 FutureCallback 中启动 ListenableFuture 并在所有完成后回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546781/