public MergeObservables(IObservable <T1> observable1, IObservable <T2> observable2,
                                Func <T1, T2, M> createCombinedModel,
                                T1 initialValue1 = default(T1), T2 initialValue2 = default(T2))
        {
            _observer1 = new ProxyObserver <T1>(
                onCompleted: OnCompleted,
                onError: OnError,
                onNext: (t1) => _observers.ForEach((o) => o.OnNext(createCombinedModel(t1, _observer2 != null ? _observer2.LastValue : default(T2)))),
                initialValue: initialValue1
                );

            _observer2 = new ProxyObserver <T2>(
                onCompleted: OnCompleted,
                onError: OnError,
                onNext: (t2) => _observers.ForEach((o) => o.OnNext(createCombinedModel(_observer1 != null ? _observer1.LastValue : default(T1), t2))),
                initialValue: initialValue2
                );

            _unsubscriber1 = observable1.Subscribe(_observer1);
            _unsubscriber2 = observable2.Subscribe(_observer2);
        }
Example #2
0
        public Fuse(IObservable <T1> source1, IObservable <T2> source2,
                    Func <T1, T2, M> resultSelector,
                    T1 initialValue1 = default(T1), T2 initialValue2 = default(T2))
        {
            _observer1 = new ProxyObserver <T1>(
                onCompleted: OnCompleted,
                onError: OnError,
                onNext: (t1) => _observers.ForEach((o, _t1, _o2) => o.OnNext(resultSelector(_t1, _o2 != null ? _o2.LastValue : default(T2))), t1, _observer2),
                initialValue: initialValue1
                );

            _observer2 = new ProxyObserver <T2>(
                onCompleted: OnCompleted,
                onError: OnError,
                onNext: (t2) => _observers.ForEach((o, _t2, _o1) => o.OnNext(resultSelector(_o1 != null ? _o1.LastValue : default(T1), _t2)), t2, _observer1),
                initialValue: initialValue2
                );

            _unsubscriber1 = source1.Subscribe(_observer1);
            _unsubscriber2 = source2.Subscribe(_observer2);
        }