IConnectableObservable<T>. Connect, méthode
Connecte l’observable.
Namespace:System.Reactive.Subjects
Assemblée: System.Reactive (en System.Reactive.dll)
Syntaxe
'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
Valeur de retour
Type : System.IDisposable
Objet IDisposable utilisé pour déconnecter l’observable.
Exemples
Dans l’exemple suivant, nous convertissons une source de séquence observable à froid en source à chaud à l’aide de l’opérateur Publish, qui retourne un T IConnectableObservable<instance> que nous nomlons hot. L’opérateur Publish fournit un mécanisme pour partager des abonnements en diffusant un seul abonnement à plusieurs abonnés. hot agit comme un proxy et s’abonne à la source, puis, quand il reçoit des valeurs de la source, les envoie à ses propres abonnés. Pour établir un abonnement à la source de stockage et commencer à recevoir des valeurs, nous utilisons la méthode IConnectableObservable.Connect(). Étant donné que IConnectableObservable hérite d’IObservable, nous pouvons utiliser S’abonner pour vous abonner à cette séquence à chaud avant même qu’elle ne commence à s’exécuter. Notez que dans l’exemple, la séquence à chaud n’a pas été démarrée lorsque subscription1 s’y abonne. Par conséquent, aucune valeur n’est envoyée à l’abonné. Après avoir appelé Connect, les valeurs sont ensuite envoyées à subscription1. Après un délai de 3 secondes, subscription2 s’abonne à chaud et commence à recevoir les valeurs immédiatement à partir de la position actuelle (3 dans ce cas) jusqu’à la fin. Une sortie classique ressemble à ceci :
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();