2016-09-16 2 views

답변

-1

조인 또는 직교 제품을 원한다면 상관하지 않습니다. IObservable<T> 인터페이스는 알림을 구독하는 용도로 사용되며 그 이상은 아무것도 아닙니다.

그러나 IObservable<T>IEnumerable<T>이라고 확신하는 경우 IEnumerable<T>으로 전송하십시오. 말할 필요도없이 이것이 최고의 디자인이 아닐 수도 있습니다.

+0

IEnumerable은 시퀀스의 다음 요소를 얻을 수있게 해줍니다. 기술적으로는 사실이지만, 각 항목을 다른 항목으로 변환하거나 다른 항목의 항목을 다른 순서로 결합하는 것과 같은 일을 할 수있는 모든 작업을 수행 할 수있는 모든 종류의 작업이 있습니다. 같은 논리가'IObservable'에도 적용됩니다. – Servy

+0

그렇다면 두 개의 IObservable 스트림에서 같은 요소를 찾아 다른 IObservable로 푸는 것이 가장 좋은 방법은 무엇입니까? –

+1

@MT 분명히 질문을 편집하고 실제로 달성하고자하는 것에 대한 자세한 내용을 제공해야합니다. –

1

정말 질문을 명확하게해야합니다. IObservable은 시간이 지남에 따라 간격을 둔 항목을 방출 할 수 있습니다. Observable-A와 Observable-B에 가입하고 한 시간에 1 번 항목을 내보내는 경우 조건을 만족합니까?

다음 코드는 내부 사용자가 모든 항목이 하나가 처음 방출 된, 방출, 또는 무엇을 시간에 대한 상관 없어 가정이 명 관찰 가능한 조인 보여줍니다 그들 사이의 상대 시간 :

var factorsOfTwo = Observable.Interval(TimeSpan.FromSeconds(1)) 
    .Select(i => i * 3) 
    .Take(10); 

var factorsOfThree = Observable.Interval(TimeSpan.FromSeconds(1)) 
    .Select(i => i * 2) 
    .Take(10); 

var factorsOfBothTwoAndThree = factorsOfTwo.Join(factorsOfThree, 
     i => Observable.Never<object>(), 
     i => Observable.Never<object>(), 
     (a, b) => Tuple.Create(a, b) 
    ) 
    .Where(t => t.Item1 == t.Item2) 
    .Select(t => t.Item1); 

factorsOfBothTwoAndThree.Subscribe(l => Console.WriteLine(l));