저는 Futures를 처음 접했고 체인 연결에 매달려있어 객체 목록을 만들었습니다. Futures.allAsList()
가 잘 작동합니다ListenableFuture의 변수 번호를 구성하십시오.
ListenableFuture<Foo> getFoo(int index) {
// gets a Foo by its index
}
ListenableFuture<Integer> getNbFoo() {
// gets the total number of Foo objects
}
방법 : 나는 가능한이 두 방법을
ListenableFuture<List<Foo>> getAllFoo() {
// ...
}
: 내가 안드로이드를 사용하고, API 분은 내가 아래의 방법 getAllFoo()
를 코딩 할 19
입니다 여기,하지만 내 주된 제약은 각각의 getFoo(int index)
에 대한 호출은 이전 호출이 완료 될 때까지 발생할 수 없다는 것입니다.
지금까지 내가 (그리고 그것을 테스트), Futures.allAsList()
"팬 아웃"호출 (모든 통화가 동시에 시작), 그래서 나는 그런 뭔가 사용할 수 없습니다 그것을 이해 :
// ...
final SettableFuture<List<Foo>> future = SettableFuture.create();
List<Foo> listFoos = new ArrayList<>();
addApToList(future, 0, nbFoo, listFoos);
// ...
private ListenableFuture<List<Foo>> addFooToList(SettableFuture future, int idx, int size, List<Foo> allFoos) {
Futures.addCallback(getFoo(idx), new FutureCallback<Foo>() {
@Override
public void onSuccess(Foo foo) {
allFoos.add(foo);
if ((idx + 1) < size) {
addFooToList(future, idx + 1, size, allFoos);
} else {
future.set(allFoos);
}
}
@Override
public void onFailure(Throwable throwable) {
future.setException(throwable);
}
});
return future;
}
이
가 어떻게 구현할 수 우아하게 ListenableFuture
를 사용하여 :
ListenableFuture<List<Foo>> getAllFoo() {
// ...
List<ListenableFuture<Foo>> allFutureFoos = new ArrayList<>();
for (int i = 0; i < size; i++) {
allFutureFoos.add(getFoo(i));
}
ListenableFuture<List<Foo>> allFoos = Futures.allAsList(allFutureFoos);
return allFoos;
}
나는 (작동) (추한) 솔루션의 종류가?
여러 개의 관련 주제 (예 : this 또는 that)가 발견되었지만 "코딩 된"변환을 사용하고 있고 다양한 변형 횟수를 기반으로하지 않습니다.
ListenableFutures
을 어떻게 구성하고 Futures.allAsList()
과 동일한 반환 값을 얻을 수 있습니까?하지만 전화 연결 (팬 인)을 사용할 수 있습니까?
감사합니다.
질문을 세 번 읽은 후에도 나는 아직도 당신이 무엇을 요구하고 있는지 알지 못합니다. –
영어가 모국어가 아니며 구두 따기에 조금 어려울 수 있습니다. 나는 편집 중이다. – w00ly