Давайте предположим, что у нас есть некоторый Flowable, который выглядит следующим образом:
val exampleFlowable = Flowable.create<Int>({ emitter ->
while (true) {
Thread.sleep(TimeUnit.SECONDS.toMillis(1))
emitter.onNext(1)
}
}, BackpressureStrategy.LATEST)
.subscribeOn(Schedulers.io())
И затем я называю take(1)
на нем и subscribe
на него примерно так (обратите внимание, избавляясь от одноразового использования в subscribe
блок):
var disposable: Disposable? = null
disposable = exampleFlowable.take(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ first ->
disposable?.dispose()
})
Перестанет ли exampleFlowable
работать, когда значение будет использовано в блоке subscribe
?
Как насчет того, чтобы я не выбрал в подписке? блок? Будет ли exampleFlowable
все еще продолжать работать?
Кроме того, что если я позвоню singleOrError
после вызова take(1)
и не буду располагаться в блоке subscribe
? Будет ли exampleFlowable
продолжать работать в этом случае, или преобразование потока в Single
означает, что восходящий поток будет работать только до тех пор, пока не будет выпущено одно значение ИЛИ ошибка? Например:
exampleFlowable.take(1).singleOrError()
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ single ->
})