Если вы не создаете операторов низкого уровня или Publisher
s, вам не нужно беспокоиться об этом.
В каком сценарии люди ожидают, что издатель продолжит посылать до тех пор, пока не будет удовлетворено предыдущее заявленное требование?
Ни одна из основных библиотек Reactive Streams не делает этого, поскольку они в конечном итоге прекращают отправку элементов. RxJava 2 и Reactor 3 очень заинтересованы в этом, так что у вас, скорее всего, будет дополнительный элемент в низкоуровневой асинхронно отмененной отмене. Akka Stream может сигнализировать больше, чем это (в прошлый раз, когда я проверял, они смешивают сигналы управления и элементы, и есть настройка конфигурации для максимального количества синхронных элементов на поток, что может привести к тому, что несколько элементов будут отправлены до того, как отмена вступит в силу).
Кроме того, если я не хочу, чтобы после отмены отправлялись какие-либо новые элементы, что мне делать?
Зависит от того, что вы реализуете: Publisher
или Subscriber
.
В Publisher
самый жадный способ - установить volatile boolean cancelled
поле и , чтобы каждый раз, когда находился в каком-либо цикле излучения.
В Subscriber
вы можете иметь поле boolean done
, которое проверяется в каждом onXXX
, чтобы при вызове Subscription.cancel()
из onNext
любой последующий вызов будет игнорироваться .