订阅多个可观察对象的观察者未完成
Observer subscribed to multiple observables is not completed
我正在尝试了解 RX 并正在为创建的观察者订阅两个不同的观察者。
var observer = Observer.Create<string>(x => Console.WriteLine(x),
() => Console.WriteLine("Completed"));
var subscription1 = Observable.Interval(TimeSpan.FromSeconds(1))
.Select(x => "X" + x)
.Subscribe(observer);
var subscription2 = Observable.Interval(TimeSpan.FromSeconds(2))
.Select(x => "YY" + x)
.Subscribe(observer);
Console.WriteLine("Unsubscribing in 5 seconds");
Thread.Sleep(5000);
subscription1.Dispose();
subscription2.Dispose();
Console.WriteLine("All disposed");
我希望在处理 subscription1 之后,观察者将完成。我在这里错过了什么?目前我从上面的代码得到以下控制台输出:
Unsubscribing in 5 seconds
X0
YY0
X1
X2
YY1
X3
All disposed
Observable.Interval
创建一个无限序列,因此您永远不会收到 'completed' 消息。通过取消订阅,您就可以停止收听这个无限序列。
如果你想要完成序列,你可以使用类似 Observable.Interval(...).Take(3)
.
的东西
我正在尝试了解 RX 并正在为创建的观察者订阅两个不同的观察者。
var observer = Observer.Create<string>(x => Console.WriteLine(x),
() => Console.WriteLine("Completed"));
var subscription1 = Observable.Interval(TimeSpan.FromSeconds(1))
.Select(x => "X" + x)
.Subscribe(observer);
var subscription2 = Observable.Interval(TimeSpan.FromSeconds(2))
.Select(x => "YY" + x)
.Subscribe(observer);
Console.WriteLine("Unsubscribing in 5 seconds");
Thread.Sleep(5000);
subscription1.Dispose();
subscription2.Dispose();
Console.WriteLine("All disposed");
我希望在处理 subscription1 之后,观察者将完成。我在这里错过了什么?目前我从上面的代码得到以下控制台输出:
Unsubscribing in 5 seconds
X0
YY0
X1
X2
YY1
X3
All disposed
Observable.Interval
创建一个无限序列,因此您永远不会收到 'completed' 消息。通过取消订阅,您就可以停止收听这个无限序列。
如果你想要完成序列,你可以使用类似 Observable.Interval(...).Take(3)
.