Partager via


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();

Voir aussi

Référence

IConnectableObservable<, interface T>

Espace de noms System.Reactive.Subjects