Останавливает ли take (1) выполнение текущей работы? - PullRequest
0 голосов
/ 15 января 2020

Давайте предположим, что у нас есть некоторый 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 ->

            })
...