簡體   English   中英

是否存在Observable.Interval的“Hot”等價物

[英]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(),所以值得谷歌。 另外值得注意的是,Publish()返回一個提供Connect()調用的IConnectableObservable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM