Отказ от ответственности: я новичок в Rx.Net.
Я хочу понять, как лучше всего использовать события с сервера, используя Rx.Net.В настоящее время у меня есть потребительский класс, который содержит тему rx, чтобы делегировать потребляемое обновление нижестоящим потребителям как:
Event Listener/Processor:
public IObservable<IUpdate> UpdateStream => _subject?.AsObservable();
try
{
// ... processing ...
_subject.OnNext(update); // update is the variable
}
catch (Exception ex)
{
_subject.OnError(ex);
}
Downstream-подписчики:
public void Subscribe()
{
_eventListener.UpdateStream.Subscribe(update =>
{
_fooProcessor.Process(update);
},
ex =>
{
// log
Subscribe(); // an effort to resubscribe lost subscription
},
() => { // log completion (optional)...}
}
Я заметил эту темугенерирует исключение onNext (элемент с тем же ключом уже добавлен), при этом свойство subject.HasObservers имеет значение false (другими словами, нижестоящий список подписки теряется).Строка кода OnError действительно срабатывает, но нижестоящие подписчики не получают уведомления (из-за утерянной подписки).
Я пытался использовать Observer.EventPattern для прослушивания события потребления и создания наблюдаемого, которое будет использоваться нисходящим потоком.абоненты;но это не сработало (я не мог оценить точку отказа в этом случае).
Существует ли шаблон для повторной подписки от нижестоящих потребителей (в разных dll), в таких случаях?
Цените любую помощь.Спасибо!