Удалить элемент из Replay Observable

Представьте, что у вас есть наблюдаемое воспроизведение, созданное с помощью одного из Replay перегружает. Существует ли вариант Replay, который создает наблюдаемое воспроизведение с помощью метода, позволяющего удалить элемент/сообщение/элемент из буфера воспроизведения?

Мне нужен наблюдаемый повтор, чтобы избежать состояния гонки: два наблюдаемых объекта A и B создают связанные сообщения. Если A создает сообщение m, то B может последовать его примеру с соответствующим сообщением m' (но это необязательно).
Чтобы отфильтровать m' из всех сообщений B, подписчик на A регистрирует подписчика с B (отфильтровано для точного сообщения m'), поскольку только при получении m программа сможет предсказать, как будет выглядеть потенциально входящее m'.

Однако иногда m' поступает даже до того, как был запланирован запуск подписчика на A, что означает, что подписчик на m' еще не зарегистрирован. Я могу решить эту проблему, обернув B в качестве наблюдаемого воспроизведения, но я хочу иметь возможность очищать обработанные сообщения из буфера воспроизведения, потому что я знаю, что каждое из сообщений B будет обрабатываться ровно одним подписчиком.


person derabbink    schedule 15.08.2013    source источник


Ответы (1)


person    schedule
comment
Я думаю, что это не решит мою проблему: моя исходная наблюдаемая продолжается, а это означает, что первая обертка воспроизведения вокруг нее не будет утилизирована, пока все ее подписчики не исчезнут. Поэтому, если я просто продолжу добавлять слои отфильтрованных оберток воспроизведения, внутренние слои будут накапливаться вечно. - person derabbink; 20.08.2013
comment
На самом деле, просто перечитайте свою проблему. Рассматривали ли вы возможность использования IObservable.Zip()? - person Aron; 20.08.2013
comment
Я подумал, а потом отказался от этой идеи :) Чтобы Zip работало, мне нужно всегда иметь m' (для каждого m). Но m' не является обязательным - person derabbink; 20.08.2013
comment
Когда вы говорите «необязательный», знает ли потребитель, является ли он необязательным? Потому что подписка m' может быть заблокирована, чтобы возвращать нулевое значение m', когда это не требуется... Или даже использовать другую пару наблюдатель/подписчик, а затем снова соединить их... - person Aron; 21.08.2013
comment
Входящий m позволит только предсказать, как идентифицировать/отфильтровать соответствующий m', если он прибудет. Его нельзя использовать для предсказания, придет оно или нет - person derabbink; 21.08.2013