Tôi đang thử nghiệm với RxJava và lớp hoàn thiện Javacủa Java 8 và không hoàn toàn hiểu cách xử lý các điều kiện hết thời gian chờ.Hủy tác vụ khi hết thời gian chờ ở RxJava
import static net.javacrumbs.futureconverter.java8rx.FutureConverter.toObservable;
// ...
Observable<String> doSomethingSlowly() {
CompletableFuture<PaymentResult> task = CompletableFuture.supplyAsync(() -> {
// this call may be very slow - if it takes too long,
// we want to time out and cancel it.
return processor.slowExternalCall();
});
return toObservable(task);
}
// ...
doSomethingSlowly()
.single()
.timeout(3, TimeUnit.SECONDS, Observable.just("timeout"));
Điều này về cơ bản hoạt động (nếu hết thời gian chờ ba giây, "thời gian chờ" được xuất bản). Tuy nhiên, tôi cũng muốn hủy bỏ nhiệm vụ trong tương lai mà tôi đã bao bọc trong một số Observable
- có thể với phương pháp RxJava làm trung tâm không?
Tôi biết rằng một tùy chọn sẽ là tự xử lý thời gian chờ, sử dụng task.get(3, TimeUnit.SECONDS)
, nhưng tôi tự hỏi liệu có thể thực hiện tất cả công việc xử lý tác vụ trong RxJava hay không.
Bạn có thể cho biết phương thức 'toObservable' có được triển khai không? –
https://github.com/lukas-krecan/future-converter/tree/master/rxjava-java8 –