0
Observable.create(...)
을 사용하여 일부 비동기 코드를 래핑합니다. 비동기 코드는 5 초 동안 "활성"상태 여야하며 중지해야합니다.RxJava 2 : Observable.create() 비동기 코드가 Thread.sleep()을 사용하여 종료 될 때까지 대기
Observable.<MyObject>create(emitter -> {
// Some async code
emitter.setDisposable(Disposables.fromRunnable(() -> {
// Stop the above async code
}));
// Wait for 5 seconds until the async code above has had enough time to finish its task.
Thread.sleep(5000);
if (!emitter.isDisposed()) {
// Stop the above async code
emitter.setDisposable(null);
}
})...
내가 Thread.sleep(5000)
가 사용되기 때문에이 최선의 방법입니다 있는지 확실하지 않습니다 : 이것은 내가 현재를 중지하고 방법이다. 일부 RxJava 코드로 이것을 수행하는 더 좋은 방법이 있습니까?
Observable.<MyObject>create(emitter -> {
// Some async code
emitter.setDisposable(Disposables.fromRunnable(() -> {
// Stop the above async code
}));
})
.take(5, TimeUnit.SECONDS);
당신은 여전히 create
에 설치 Disposable
에 있습니다
이 비동기 코드 란 무엇입니까? 자체적으로 완료했는지 여부를 알 수 없습니까? 소스를 멈출 수있는 타임 아웃'take()'오버로드가 있지만 여전히'create'에'setDisposable'을 가져야합니다. – akarnokd
@akarnokd 비동기 코드는 Android의 Network Service Discovery (https://developer.android.com/training/connect-devices-wirelessly/nsd.html#discover)입니다. 청취자가 등록 해제 될 때까지 로컬 네트워크의 장치를 검색합니다. 난 단지 한 번 스캔하기를 원하기 때문에 수동으로 5 초 후에 청취자를 등록 해제 한 다음에 emitter.onComplete()를 호출해야합니다. 'take()'가 관찰 가능 객체를 완성하고 처리합니까? –
Javadoc과 다이어그램을 살펴보십시오. [take()] (http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Observable.html#take-long-java.util.concurrent. TimeUnit-). – akarnokd