메서드로 처리해야하는 작업 목록이 있는데, 프로세스에 시간이 오래 걸리므로 목록의 작업을 비동기 모드에서 하나씩 처리하고 결과를 비동기 스트림으로 반환하고 싶습니다. 따라서 다운 스트림 처리는 전체 작업 목록의 완료를 기다릴 필요가 없습니다.
AsyncStream<R> methodA(List<T> tasks){tasks.forEach(t -> {calculation that takes a long time})}
인터넷에서 간단히 검색 한 후 RxJava가 비동기 스트리밍 데이터를 처리 할 수 있다는 것을 알았습니다. 그러나 소개에서는 비동기 데이터 스트림을 만드는 방법을 설명하는 것 같습니다. 그렇다면 Java에서 비동기 생산자 / 소스를 만드는 방법은 무엇입니까?
Observable
주어진 작업에 대한 계산이 완료되는 즉시 값을 내보내는 비동기식 을 만들 수 있습니다 . 이를 위해서는 flatMap
운영자 가 필요 합니다. 간단한 예에서 이것은 다음과 같습니다.
static Observable<String> methodA(List<String> tasks) {
return Observable.from(tasks)
.flatMap(t -> Observable.just(t)
.map(t1 -> longRunningTask(t1))
.subscribeOn(Schedulers.io())
);
}
static String longRunningTask(String arg) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return arg;
}
작업을 매핑 Observable
하고 사용 subscribeOn
하여 무언가를 구독 할 때 구독이 다른 스레드에서 발생하도록합니다. flatMap
연산자 Observables
는 한 번 에 모든 항목을 구독하고 준비되는 즉시 값을 내 보냅니다. 구독은 Scedulers.io
풀 과 다른 스레드에서 발생하므로 계산은 비동기 적 입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다