Aracılığıyla paylaş


Rx'te Ana Arabirimleri Keşfetme

Bu konuda, gözlemlenebilir dizileri temsil etmek ve bunlara abone olmak için kullanılan başlıca Reaktif Uzantılar (Rx) arabirimleri açıklanmaktadır.

IObservable<T>/IObserver<T> arabirimleri .NET Framework 4.0 temel sınıf kitaplığında bulunur ve Javascript'in yanı sıra .NET 3.5, Silverlight 3 ve 4'te yüklenebilen bir pakette gelir.

IObservable<T>/IObserver<T>

Rx, zaman uyumsuz ve olay tabanlı veri kaynaklarını, .NET Framework 4.0'daki yeni IObservable T> arabirimi tarafından soyutlanan gönderme tabanlı, gözlemlenebilir<diziler olarak kullanıma sunar. Bu IObservable<T> arabirimi, çekme tabanlı, numaralandırılabilir koleksiyonlar için kullanılan tanıdık IEnumerable<T> arabiriminin bir çiftidir. Gözlemlenebilir bir veri kaynağını temsil eder, yani ilgilenen herkese veri gönderebilir. Bu tür ilgili dinleyicileri temsil eden bağımlı IObserver<T> uygulamalarının listesini tutar ve durum değişikliklerini onlara otomatik olarak bildirir.

IObservable<T> arabiriminin bir uygulaması, T türünde bir öğe koleksiyonu olarak görüntülenebilir. Bu nedenle, IObservable<int> , tamsayıların abone olan gözlemcilere gönderileceği bir tamsayı koleksiyonu olarak görüntülenebilir.

Rx nedir? bölümünde açıklandığı gibi, gönderme modelinin diğer yarısı, bir abonelik aracılığıyla ilgi alanı kaydeden bir gözlemciyi temsil eden IObserver<T> arabirimiyle temsil edilir. Öğeler daha sonra abone olduğu gözlemlenebilir diziden gözlemciye teslim edilir.

Gözlemlenebilir bir koleksiyondan bildirim almak için IObservable subscribe yöntemini kullanarak bir IObserver<T> nesnesi verirsiniz. Bu gözlemcinin karşılığında Subscribe yöntemi, abonelik için tanıtıcı işlevi gören bir IDisposable nesnesi döndürür. Bu, işiniz bittikten sonra aboneliği temizlemenize olanak tanır.  Bu nesnede Dispose çağrısı, bildirimlerin artık teslim edilmemesi için gözlemciyi kaynaktan ayırır. Çıkarabileceğiniz gibi, Rx'te .NET olay modelinde olduğu gibi bir olayın aboneliğini açıkça kaldırmanız gerekmez.

Gözlemciler, arabirimin yöntemleri tarafından yansıtılan üç yayın olayını destekler. Gözlemlenebilir veri kaynağında kullanılabilir veriler olduğunda OnNext, sıfır veya daha fazla kez çağrılabilir. Örneğin, fare taşıma olayları için kullanılan gözlemlenebilir bir veri kaynağı, fare her hareket edişinde bir Point nesnesi gönderebilir. Diğer iki yöntem, tamamlanma veya hataları belirtmek için kullanılır.

IObservable<T>/IObserver<T> arabirimleri aşağıda listelemektedir.

public interface IObservable<out T> 
{ 
   IDisposable Subscribe(IObserver<T> observer); 
} 
public interface IObserver<in T> 
{ 
   void OnCompleted();            // Notifies the observer that the source has finished sending messages.
   void OnError(Exception error); // Notifies the observer about any exception or error.
   void OnNext(T value);          // Pushes the next data value from the source to the observer.
} 

Rx ayrıca IObserver<T> arabirimini uygulamaktan kaçınabilmeniz için Abone olma uzantısı yöntemleri de sağlar. Gözlemlenebilir bir dizinin her yayın olayı (OnNext, OnError, OnCompleted) için, aşağıdaki örnekte gösterildiği gibi çağrılacak bir temsilci belirtebilirsiniz. Bir olay için bir eylem belirtmezseniz, varsayılan davranış gerçekleşir.

IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1
IDisposable subscription = source.Subscribe(
                            x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed
                            ex => Console.WriteLine("OnError: {0}", ex.Message),
                            () => Console.WriteLine("OnCompleted"));

Gözlemlenebilir diziyi (fare üzerinde gerçekleşen olayların dizisi gibi) normal bir koleksiyon gibi değerlendirebilirsiniz. Böylece filtreleme, gruplandırma, oluşturma gibi işlemler yapmak için koleksiyon üzerinde LINQ sorguları yazabilirsiniz. Gözlemlenebilir dizileri daha kullanışlı hale getirmek için Rx derlemeleri birçok fabrika LINQ işleci sağlar, böylece bunların hiçbirini kendi başınıza uygulamanız gerekmez. Bu, LINQ İşleçlerini Kullanarak Gözlemlenebilir Dizileri Sorgulama konusunda ele alınacaktır.

Uyarı

IObservable<T/IObserver<T>> arabirimlerini kendiniz uygulamanız gerekmez. Rx, bu arabirimlerin iç uygulamalarını sizin için sağlar ve Gözlemlenebilir ve Gözlemci türleri tarafından sağlanan çeşitli uzantı yöntemleri aracılığıyla kullanıma sunar. Daha fazla bilgi için Gözlemlenebilir Dizileri Oluşturma ve Sorgulama konusuna bakın.

Ayrıca Bkz.

Kavramlar

LINQ İşleçlerini Kullanarak Gözlemlenebilir Dizileri Sorgulama

Diğer Kaynaklar

Gözlemlenebilir Diziler Oluşturma ve Sorgulama