Об использовании метода подписки с возвратом подписчика

Интересно, почему subscribeWith Метод возвращает подписчика, но не является строго одноразовым или, может быть, подпиской.

Я думаю, что subscribeWith метод был разработан для использования RxJava 1.x subscribe метод, который возвращает подписку. Поэтому в 2.0, я думаю, что основное использование subscribeWith Метод будет использовать с подписчиком, который реализует одноразовые.

Hoverver, так как subscribeWith Метод может вернуть подписчика, возможно использование объекта (например, приведенный ниже код).

Subscriber<Long> subscriber = Flowable.interval(100, TimeUnit.MILLISECONDS)
    .subscribeWith(new Subscriber<Long>() {
      ...
    });

...

subscriber.onNext(999);

...

Это нормально или что-то, что я не должен делать?

2 ответа

Решение

Подписчик в 2.x не реализует Устранимый и потребует обертывания / угона каждого подписчика. Вы получаете обратно то, что вы подписались, и у нас есть ResourceSubscriber а также DisposableSubscriber что конкретно реализовать Disposable правильно.

Однако, поскольку метод subscribeWith может возвращать подписчика, может быть возможно использование в подобной теме (например, в приведенном ниже коде).

Это не рекомендуется, поскольку вы нарушаете протокол, возможно, вызывая onNext одновременно. (Это не результат subscribeWith потому что вы могли бы предварительно создать Subscriber, вызов subscribe() а затем позвоните onNext() на оригинале Subscriber экземпляр нарушает протокол таким же образом.)

subscribeWith действительно существует возможность работать с подписчиками, которые свободно поддерживают Disposable и допускают следующий шаблон:

CompositeDisposable cd = new CompositeDisposable();

cd.add(source.subscribeWith(new ResourceSubscriber<Integer>() { ... }));

Смотрите нашу вики для этого и других деталей 2.x.

Если у вас есть один и тот же наблюдатель, которого вы хотите привязать к разным наблюдаемым, используйте.subscribeWith, чтобы несколько наблюдаемых могли использовать одну и ту же реализацию наблюдателя.

Другие вопросы по тегам