Несколько подписок от одного наблюдателя в Rx - PullRequest
1 голос
/ 11 июля 2010

Я пытаюсь уточнить фильтр в своем Обозревателе с течением времени, и мне было интересно, как они лучше всего это делают.

Например, myObservable.Where(x=>x.Color=="red").Subscribe();

, а затем myObservable.Where(x=>x.Color=="blue").Subscribe();

, а затем объединить два в один поток, так что OnNext() вызывается для наблюдаемых Красных ИЛИ Синих.

Возможно, он не полностью нажал на то, что происходит для меня.

Что если у меня тоже есть myObservable.Where(x=>x.Type=="Car").Subscribe();.Он будет продолжать вызывать один и тот же метод OnNext () каждый раз?Какая польза от этого для меня ... Я мог бы хотеть реагировать по-разному в зависимости от того, какая подписка вызывает обновление, но в то же время я мог бы хотеть сгладить подписки.

Например, в приведенном выше сценарии, если цветкрасный, я хочу написать «новый красный объект», и если это автомобиль, я хочу написать «новый автомобиль».Как бы я сделал это в Rx?Существует перегрузка для подписки на OnNext, OnError и т. Д., Но для этого требуется, чтобы Наблюдатель тоже был наблюдаемым (Тема) ... исправьте меня, если я ошибаюсь.

Это не имеет смысла для меня.... почему то, что наблюдает за изменениями, также должно быть наблюдаемым?

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Как насчет этого?

myObservable.Where(x=>x.Color=="red" || x.Color == "blue").Subscribe(x=>Console.WriteLine("new {0} object", x.Color));
myObservable.Where(x=>x.Type=="Car").Subscribe(x=>Console.WriteLine("new car"));

Jeffrey

0 голосов
/ 29 июля 2010

Во-первых, Субъект - это наблюдаемая, которая генерирует в ответ на наблюдение других наблюдаемых. В некоторых ситуациях они полезны как «слесарное дело», и вы даже можете использовать их для создания формы «агентов», которые общаются по каналам.

По вашему основному вопросу: я думаю, что он, возможно, не щелкнул, потому что в ваших примерах подписки вы пропустили, на что Observer должен быть подписан - это не может быть ... Subscribe (), это должно быть .. .Subscribe (наблюдатель).

Один из ответов на ваш вопрос заключается в том, что вы можете просто подписать одного и того же наблюдателя на несколько наблюдаемых. Или вы можете использовать Merge. Если вы хотите различить их, то самый простой способ - это два субъекта, которые наблюдают, делают то, что специфично для такого рода вещей, а затем передают наблюдения для объединения. В качестве альтернативы, вы можете использовать Выбрать, чтобы пометить наблюдения перед их объединением.

...