0
長期のタスクを中断するにはどうすればよいですか?公開されたフローを中断する方法
public Flowable<Integer> simple(int number) {
Flowable<Integer> flowable = Flowable.create(emitter -> {
for (int i = 1; i <= number; ++i) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
throw e;
}
emitter.onNext(i);
}
emitter.onComplete();
}, BackpressureStrategy.BUFFER);
flowable = flowable.subscribeOn(Schedulers.newThread());
return flowable.publish().autoConnect();
}
flowableが公開されたときにdisposeメソッドを呼び出した後も、タスクは続行されます。だから私は中断された例外をキャッチしたい。
Flowable<Integer> f = simple(100);
Disposable d = f.subscribe(number -> System.out.println(number));
Thread.sleep(500);
d.dispose();
また、リプレイと同じ動作です。
スリープが長すぎる(Thread.sleep(1000000);)か、IO操作がブロックされていると機能しますか? –
理論的には、 'Thread.interrupt()'にリストされている操作と同じくらい長く動作するはずです。 – Kiskae