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