IConnectableObservable<T>. Connect Yöntemi
Gözlemlenebilir öğesini bağlar.
Ad Alanı:System.Reactive.Subjects
Derleme: System.Reactive (System.Reactive.dll içinde)
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
Dönüş Değeri
Tür: System.IDisposable
Gözlemlenebilir bağlantısını kesmek için kullanılan IDisposable nesnesi.
Örnekler
Aşağıdaki örnekte, sık erişimli olarak adlandırdığımız IConnectableObservable T> örneğini döndüren Publish işlecini kullanarak soğuk gözlemlenebilir< bir sıra kaynağını sık erişimliye dönüştürüyoruz. Publish işleci, birden çok aboneye tek bir abonelik yayınlayarak abonelikleri paylaşma mekanizması sağlar. hot bir ara sunucu olarak görev yapar ve kaynağa abone olur, ardından kaynaktan değer aldığında bunları kendi abonelerine iletir. Yedekleme kaynağına abonelik oluşturmak ve değerleri almaya başlamak için IConnectableObservable.Connect() yöntemini kullanırız. IConnectableObservable, IObservable'ı devraldığından, çalışmaya başlamadan önce bile bu sık erişimli diziye abone olmak için Subscribe özelliğini kullanabiliriz. Örnekte, subscription1 abone olduğunda etkin sıranın başlatılmadığını unutmayın. Bu nedenle aboneye hiçbir değer gönderilmez. Connect çağrıldıktan sonra değerler subscription1 aboneliğine gönderiliyor. 3 saniyelik bir gecikmeden sonra subscription2 sık erişimliye abone olur ve değerleri geçerli konumdan (bu örnekte 3) sonuna kadar hemen almaya başlar. Çıktı şuna benzer:
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();