是否有 'Hot' 相当于 Observable.Interval
Is there a 'Hot' equivalent of Observable.Interval
如果我执行以下操作:
var obs =
Observable
.Interval(TimeSpan.FromSeconds(1))
.Select(x => "A" + x.ToString());
obs
.Subscribe(x => Console.WriteLine("From first: " + x.ToString()));
Observable
.Timer(TimeSpan.FromSeconds(3))
.SelectMany(_ => obs)
.Subscribe(x => Console.WriteLine("From second: " + x.ToString()));
我会在 4 秒后得到这个:
From first: A0
From first: A1
From first: A2
From second: A0
From first: A3
是否有一个 'Hot' 相当于 Observable.Interval
会产生这个:
From first: A0
From first: A1
From first: A2
From second: A3
From first: A3
使用 Publish() 和 Connect() 会使冷的可观察对象变热。
var published = Observable
.Interval(...)
.Select(...)
.Publish();
var connectionSubscription = published.Connect();
var observerSubscription = published.Subscribe(...);
值得注意的是,一旦 Connect() 调用发生,序列就会很热。您可以在 Connect() 之前订阅,但请确保您在某个阶段调用它,否则将不会观察到任何内容。 Connect() 有一些替代方法,例如RefCount() 值 google。同样值得注意的是 Publish() returns 一个提供 Connect() 调用的 IConnectableObservable。
如果我执行以下操作:
var obs =
Observable
.Interval(TimeSpan.FromSeconds(1))
.Select(x => "A" + x.ToString());
obs
.Subscribe(x => Console.WriteLine("From first: " + x.ToString()));
Observable
.Timer(TimeSpan.FromSeconds(3))
.SelectMany(_ => obs)
.Subscribe(x => Console.WriteLine("From second: " + x.ToString()));
我会在 4 秒后得到这个:
From first: A0
From first: A1
From first: A2
From second: A0
From first: A3
是否有一个 'Hot' 相当于 Observable.Interval
会产生这个:
From first: A0
From first: A1
From first: A2
From second: A3
From first: A3
使用 Publish() 和 Connect() 会使冷的可观察对象变热。
var published = Observable
.Interval(...)
.Select(...)
.Publish();
var connectionSubscription = published.Connect();
var observerSubscription = published.Subscribe(...);
值得注意的是,一旦 Connect() 调用发生,序列就会很热。您可以在 Connect() 之前订阅,但请确保您在某个阶段调用它,否则将不会观察到任何内容。 Connect() 有一些替代方法,例如RefCount() 值 google。同样值得注意的是 Publish() returns 一个提供 Connect() 调用的 IConnectableObservable。