publish
運營商將您的Observable轉換爲Connectable Observable
。
讓我們看看Connectable Observable
是什麼意思:假設你想訂閱一個可觀察的多個時間,並且想要爲每個訂戶提供相同的項目。您需要使用Connectable Observable
。
例子:
var period = TimeSpan.FromSeconds(1);
var observable = Observable.Interval(period).Publish();
observable.Connect();
observable.Subscribe(i => Console.WriteLine("first subscription : {0}", i));
Thread.Sleep(period);
observable.Subscribe(i => Console.WriteLine("second subscription : {0}", i));
輸出:
first subscription : 0
first subscription : 1
second subscription : 1
first subscription : 2
second subscription : 2
在這種情況下,我們有足夠快認購的第一項正式發佈之前,但只有第一簽約上。第二次訂閱訂閱太晚而錯過了第一次發佈。
我們可以移動Connect()方法的調用,直到所有訂閱完成爲止。這樣,即使對Thread.Sleep的調用,我們也不會真正訂閱基礎,直到兩個訂閱都完成爲止。這將如下進行:
var period = TimeSpan.FromSeconds(1);
var observable = Observable.Interval(period).Publish();
observable.Subscribe(i => Console.WriteLine("first subscription : {0}", i));
Thread.Sleep(period);
observable.Subscribe(i => Console.WriteLine("second subscription : {0}", i));
observable.Connect();
輸出:
first subscription : 0
second subscription : 0
first subscription : 1
second subscription : 1
first subscription : 2
second subscription : 2
因此,使用Completable觀察的,我們有辦法來控制何時讓可觀察EMIT項目。取自
實施例:http://www.introtorx.com/Content/v1.0.10621.0/14_HotAndColdObservables.html#PublishAndConnect
EDIT 根據第一百八滑動在this link:
發佈的另一性質是,如果任何觀察者開始觀察後的可觀察到的10秒開始發光物品,觀察者獲得只有那些在10秒後(在訂購時)發射的物品不是全部物品。所以在側面,我可以理解發布正在用於UI事件。而且任何觀察者都應該只接收那些在訂閱完所有事件之後才執行的事件,這是完全合理的。
希望它有幫助。
我一直使用這個來自傑克·沃頓的演講「管理狀態」,我不知道它到底是怎麼回事。這是如此簡潔明瞭,非常感謝你。 – Hohenhiem