連接可觀察的 。
Namespace:System.Reactive.Subjects
裝配: System.Reactive.dll) 中的 System.Reactive (
語法
'Declaration
Function Connect As IDisposable
'Usage
Dim instance As IConnectableObservable
Dim returnValue As IDisposable
returnValue = instance.Connect()
IDisposable Connect()
IDisposable^ Connect()
abstract Connect : unit -> IDisposable
function Connect() : IDisposable
傳回值
類型: System.IDisposable
用來中斷可觀察物件的 IDisposable 物件。
範例
在下列範例中,我們會使用 Publish 運算子將冷可觀察序列來源轉換成經常性存取序列來源,這會傳回我們命名為 hot的 IConnectableObservable < T >實例。 發佈操作員提供一種機制,可將單一訂閱廣播給多個訂閱者,以共用訂閱。 hot 會作為 Proxy 並訂閱來源,然後從來源接收值時,將它們推送至自己的訂閱者。 若要建立支援來源的訂用帳戶並開始接收值,我們會使用 IConnectableObservable.Connect () 方法。 由於 IConnectableObservable 繼承 IObservable,因此即使在開始執行之前,我們還是可以使用 Subscribe 來訂閱此熱順序。 請注意,在範例中,當 subscription1 訂閱時,尚未啟動熱順序。 因此,不會將任何值推送至訂閱者。 呼叫 Connect 之後,值就會推送至 subscription1。 延遲 3 秒之後,subscription2 會訂閱經常性存取,並開始立即從目前位置接收值, (3,在此情況下) 直到結束為止。 輸出如下所示:
Current Time: 6/1/2011 3:38:49 PM
Current Time after 1st subscription: 6/1/2011 3:38:49 PM
Current Time after Connect: 6/1/2011 3:38:52 PM
Observer 1: OnNext: 0
Observer 1: OnNext: 1
Current Time just before 2nd subscription: 6/1/2011 3:38:55 PM
Observer 1: OnNext: 2
Observer 1: OnNext: 3
Observer 2: OnNext: 3
Observer 1: OnNext: 4
Observer 2: OnNext: 4
Console.WriteLine("Current Time: " + DateTime.Now);
var source = Observable.Interval(TimeSpan.FromSeconds(1)); //creates a sequence
IConnectableObservable<long> hot = Observable.Publish<long>(source); // convert the sequence into a hot sequence
IDisposable subscription1 = hot.Subscribe( // no value is pushed to 1st subscription at this point
x => Console.WriteLine("Observer 1: OnNext: {0}", x),
ex => Console.WriteLine("Observer 1: OnError: {0}", ex.Message),
() => Console.WriteLine("Observer 1: OnCompleted"));
Console.WriteLine("Current Time after 1st subscription: " + DateTime.Now);
Thread.Sleep(3000); //idle for 3 seconds
hot.Connect(); // hot is connected to source and starts pushing value to subscribers
Console.WriteLine("Current Time after Connect: " + DateTime.Now);
Thread.Sleep(3000); //idle for 3 seconds
Console.WriteLine("Current Time just before 2nd subscription: " + DateTime.Now);
IDisposable subscription2 = hot.Subscribe( // value will immediately be pushed to 2nd subscription
x => Console.WriteLine("Observer 2: OnNext: {0}", x),
ex => Console.WriteLine("Observer 2: OnError: {0}", ex.Message),
() => Console.WriteLine("Observer 2: OnCompleted"));
Console.ReadKey();