2010-07-11 2 views
1

시간이 지남에 Observer에서 필터를 세분화하려고하고 있으며 최선의 방법이 무엇인지 궁금합니다.Rx에있는 하나의 옵저버로부터의 여러 구독

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 등등에 대한 구독에 과부하가 있습니다.하지만 Observer 역시 관찰 가능해야합니다 (제목). 내가 틀렸다면 나를 수정하십시오.

이것은 나에게 의미가 없습니다. 왜 변화를 관찰하고있는 것이 관찰 가능해야합니까?

답변

1

어때?

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")); 

은 제프리

+0

myObservable.Where (x => x.Color == "red")가있는 경우 구독 (x => ...); 어떻게하면 x.Color == "blue"를 추가 할 수 있습니까? .Merge()를 사용합니까? 또는.. – sjhuk

0

우선, 다른 관찰 가능한 주제를 관찰하는 데에 응답하여 생성하는 관찰된다. 그것들은 어떤 상황에서는 "배관 공사 (plumbing)"로 유용하며, 채널을 통해 통신하는 "에이전트"형태를 구축하는 데에도 사용할 수 있습니다.

귀하의 주된 질문은 : 구독자의 예에서 Observer가 구독해야하는 것을 버렸기 때문에 클릭하지 않았을 수 있습니다. 구독 할 수는 없습니다 ... 구독해야합니다. .. 구독 (관찰자).

하나의 질문에 대한 답은 동일한 관찰자를 여러 관찰 대상에 등록 할 수 있다는 것입니다. 또는 병합을 사용할 수 있습니다. 당신이 그들을 구별 할 수 있기를 원한다면, 가장 쉬운 방법은 관찰하는 두 과목을 가지고, 그런 종류의 것에 특정한 것을하고, 그 다음에 관찰을 합쳐 병합하는 것입니다. 또는 병합하기 전에 관측치에 태그를 추가하려면 선택을 사용할 수 있습니다.

관련 문제