#537·UniRx

Wrong OnCompleted timing of ZipObservable

Author: ymfactCreated Nov 29, 2023Updated Nov 29, 2023

ZipObservable has wrong OnCompleted timing.

csharp
var source1 = new Subject<int>();
var source2 = new Subject<char>();
var observable = Observable.Zip(source1, source2, (x, y) => $"{x}{y}");
observable.Subscribe(
    onNext: Console.WriteLine,
    onCompleted: () => Console.WriteLine("OnCompleted"));
source1.OnNext(1);
source2.OnNext('A');
source1.OnNext(2);
source2.OnNext('B');
source2.OnNext('C');
source2.OnNext('D');
source1.OnNext(3);
source2.OnCompleted();
source1.OnNext(4); // observable should be completed here
source1.OnNext(5); // observable is completed here in UniRx
source1.OnCompleted();

reference: zipzip

https://rxmarbles.com/#zip

csharp
var source1 = new Subject<int>();
var source2 = new Subject<char>();
var observable = Observable.Zip(source1, source2, (x, y) => $"{x}{y}");
observable.Subscribe(
    onNext: Console.WriteLine,
    onCompleted: () => Console.WriteLine("OnCompleted"));
source1.OnNext(1);
source2.OnNext('A');
source1.OnNext(2);
source2.OnNext('B');
source1.OnNext(3);
source2.OnNext('C');
source1.OnCompleted(); // observable should be completed here
source2.OnCompleted(); // observable is completed here in UniRx

reference: zip

https://reactivex.io/documentation/operators/zip.html