Вы смешиваете режимы здесь.Не делай этого.Либо используйте RxJava, либо используйте Futures.Вы создали начало технического кошмара.
В планировщике io()
создается нить, которая сразу спит в течение 2 секунд.Цепочка наблюдателя удаляется («выбрасывая 2»), высвобождая ресурсы, и dispose()
возвращается обратно по цепочке.Однако dispose()
ничего не будет делать в потоке io()
, потому что он заблокирован sleep()
.Теперь существует условие состязания, независимо от того, завершается ли поток или сначала выполняется операция удаления.
Я не могу посоветовать вам, как решить проблему, поскольку я не знаю, что вы пытаетесь сделать.Я просто знаю, что то, что у тебя есть, ненадежно.