요청을 다른 스레드에 제출할 수도 있고하지 않을 수도있는 다른 스레드에 요청을 제출하는 코드가 있습니다. 반환 유형은 Future<Future<T>>
입니다. 앞으로이 전체 체인의 완성을 기다리는 Future<T>
으로 즉시 전환 할 수있는 비 치명적인 방법이 있습니까?Future <Future<T>>을 미래의 <T>으로 바꾸는 쉬운 방법이 있습니까?
다른 재미있는 동시성 작업을 처리하고 Google Collections 및 그 잘 작동하는 작업을 대체하기 위해 이미 Guava 라이브러리를 사용하고 있지만이 경우 뭔가를 찾지 못하는 것 같습니다.)
public class UnwrapFuture<T> implements Future<T> {
Future<Future<T>> wrappedFuture;
public UnwrapFuture(Future<Future<T>> wrappedFuture) {
this.wrappedFuture = wrappedFuture;
}
public boolean cancel(boolean mayInterruptIfRunning) {
try {
return wrappedFuture.get().cancel(mayInterruptIfRunning);
} catch (InterruptedException e) {
//todo: do something
} catch (ExecutionException e) {
//todo: do something
}
}
...
}
당신은 (얻을 예외를 처리해야 올릴 수 있지만, 다른 방법은 없습니다 :
가능한 경우 유용 할 것입니다. 컨텍스트를 조금 더 추가하십시오. 분명한 대답은 get()을 호출하는 것이지만, 아마도 당신이 원하는 것은 아닙니다. –
완료. 미안해. – Nik
Monad가 필요한 것 같아요. – user