IConnectableObservable<T>. Connect – metoda
Připojí pozorovatelnou.
Obor názvů:System.Reactive.Subjects
Sestavení: System.Reactive (v System.Reactive.dll)
Syntax
'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
Návratová hodnota
Typ: System.IDisposable
IDisposable objekt použitý k odpojení pozorovatelného.
Příklady
V následujícím příkladu převedeme zdroj studené pozorovatelné sekvence na horký zdroj pomocí operátoru Publish, který vrátí instanci IConnectableObservable<T> , kterou pojmenujeme horká. Operátor Publish poskytuje mechanismus pro sdílení předplatných vysíláním jednoho předplatného více odběratelům. hot funguje jako proxy server a přihlásí se k odběru zdroje, pak když přijímá hodnoty ze zdroje, nasdílí je vlastním odběratelům. K vytvoření odběru záložního zdroje a zahájení příjmu hodnot používáme metodu IConnectableObservable.Connect(). Vzhledem k tomu, že IConnectableObservable dědí IObservable, můžeme použít Možnost Přihlásit k odběru této horké sekvence ještě předtím, než začne běžet. Všimněte si, že v tomto příkladu se horká sekvence nespustila, když se předplatné 1 přihlásí k odběru. Odběrateli se proto neodesílala žádná hodnota. Po volání connect se hodnoty nasdílí do předplatného subscription1. Po zpoždění 3 sekund se předplatné 2 přihlásí k odběru horké a začne přijímat hodnoty okamžitě od aktuální pozice (v tomto případě 3) až do konce. Výstup vypadá takto:
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();