Cysharp / R3

The new future of dotnet/reactive and UniRx.
MIT License
1.72k stars 70 forks source link

Second and subsequent Observable is not disposed on Switch #177

Closed SakaITa closed 3 months ago

SakaITa commented 3 months ago

When I ran the code below, the second and subsequent Observables were not disposed. It look like unexpected behavior.

using R3;

var subject = new Subject<Observable<int>>();

var disposable = subject.Switch().Subscribe();

var observable1 = new Subject<int>();
var observable2 = new Subject<int>();
var observable3 = new Subject<int>();
var observable4 = new Subject<int>();

subject.OnNext(observable1.Do(onDispose: () => Console.WriteLine("Dispose 1")));
subject.OnNext(observable2.Do(onDispose: () => Console.WriteLine("Dispose 2")));
subject.OnNext(observable3.Do(onDispose: () => Console.WriteLine("Dispose 3")));
subject.OnNext(observable4.Do(onDispose: () => Console.WriteLine("Dispose 4")));

disposable.Dispose();

// expected output:
// Disposed 1
// Disposed 2
// Disposed 3
// Disposed 4

// actual output:
// Disposed 1
neuecc commented 3 months ago

thanks, it seems and bug and it is critical, I'll fix soon.

neuecc commented 3 months ago

I've fixed at v1.1.11.