Aracılığıyla paylaş


Reaktif Uzantılar

Reactive Extensions (Rx), gözlemlenebilir diziler ve LINQ stili sorgu işleçleri kullanarak zaman uyumsuz ve olay tabanlı programlar oluşturmak için kullanılan bir kitaplıktır.

Veri dizileri bir dosya veya web hizmetinden veri akışı, web hizmetleri istekleri, sistem bildirimleri veya kullanıcı girişi gibi bir dizi olay gibi birçok biçimde olabilir.

Reaktif Uzantılar tüm bu veri dizilerini gözlemlenebilir diziler olarak temsil eder. Bir uygulama, yeni veriler geldikçe zaman uyumsuz bildirimler almak için bu gözlemlenebilir dizilere abone olabilir. Rx kitaplığı.NET'te masaüstü uygulaması geliştirme için kullanılabilir. Ayrıca Silverlight, Windows Phone 7 ve JavaScript için de yayınlanır. Bu farklı platformlar hakkında daha fazla bilgi için Rx Sürümleri Arasındaki Farklar konusuna bakın.

Verileri Çekme ve Gönderme karşılaştırması

Etkileşimli programlamada uygulama, kaynağı temsil eden bir diziden veri çekerek daha fazla bilgi için bir veri kaynağını etkin bir şekilde yoklar. Bu tür davranış, IEnumerable<T/IEnumerator T'nin>> yineleyici deseni<ile temsil edilir. IEnumerable<T> arabirimi, bu koleksiyonda yineleme yapmak için bir IEnumerator T> döndüren tek bir GetEnumerator<() yöntemini kullanıma sunar.  IEnumerator<T> , geçerli öğeyi almamıza (Current özelliğini döndürerek) ve yinelemek için daha fazla öğe olup olmadığını belirlememize olanak tanır (MoveNext yöntemini çağırarak). 

Uygulama, veri alma işleminde etkindir: GetEnumerator'ı çağırarak bir numaralandırıcı almanın yanı sıra, MoveNext'i kendi rahatlığında çağırarak alma hızını da denetler. Bu numaralandırma düzeni zaman uyumlu olduğundan, veri kaynağı yoklanırken uygulama engellenebilir. Bu tür çekme deseni, kitaplığınızı ziyaret etmeye ve bir kitabı kontrol etmeye benzer. Kitabı bitirdikten sonra, başka bir kitabı kontrol etmek için başka bir ziyarette bulunursunuz.

Öte yandan, reaktif programlamada uygulamaya bir veri akışına abone olarak (Rx'te gözlemlenebilir sıra olarak adlandırılır) daha fazla bilgi sunulur ve herhangi bir güncelleştirme kaynaktan bu akışa gönderilir. Uygulama, veri alma işleminde pasiftir: gözlemlenebilir kaynağa abone olmanın dışında, kaynağı etkin bir şekilde yoklamaz, yalnızca ona gönderilen verilere tepki gösterir. Akışın sunacağı veri kalmadığında veya akışın işi bittiğinde kaynak aboneye bir bildirim gönderir. Bu şekilde, kaynağın güncelleştirilmesi beklenerek uygulama engellenmez.

Bu, Reaktif Uzantılar tarafından kullanılan gönderim düzenidir. Belirli bir türe ilginizi kaydettiğiniz bir kitap kulübüne katılmaya benzer ve ilginizle eşleşen kitaplar yayımlandıkça size otomatik olarak gönderilir. İstediğiniz bir şeyi elde etmek için sırada beklemeniz gerekmez. Gönderme deseninin uygulanması birçok senaryoda, özellikle uygulama bazı olayları beklerken ui iş parçacığının engellenmediği ui yoğun bir ortamda yararlıdır. Bu, kendi zaman uyumsuz gereksinimleri olan Silverlight gibi programlama ortamlarında da önemlidir. Özetle, Rx kullanarak uygulamanızı daha hızlı yanıt verebilir hale getirebilirsiniz.

Rx tarafından uygulanan gönderim modeli, IObservable T/IObserver<T>> gözlemlenebilir<deseni ile temsil edilir. IObservable<T> arabirimi, tanıdık IEnumerable<T> arabiriminin bir çiftidir. Bir veri dizisini soyutlar ve veri dizisiyle ilgilenen IObserver<T> uygulamalarının listesini tutar. IObservable, durum değişikliklerini tüm gözlemcilere otomatik olarak bildirir. Bir ilgi alanını bir abonelik aracılığıyla kaydetmek için IObserver alan ve bir IDisposable döndüren IObservable Subscribe yöntemini kullanırsınız. Bu sayede aboneliği izleyebilir ve atabilirsiniz. Ayrıca, Rx'in gözlemlenebilir diziler üzerinde LINQ uygulaması geliştiricilerin .NET olayları, APM tabanlı ("IAsyncResult") hesaplamalar, Görev<T> tabanlı hesaplamalar, Windows 7 Algılayıcı ve Konum API'leri, SQL StreamInsight zamansal olay akışları, F# birinci sınıf olayları ve zaman uyumsuz iş akışları gibi gönderme tabanlı diziler üzerinden karmaşık olay işleme sorguları oluşturmasına olanak tanır. IObservable T/IObserver<T> arabirimleri hakkında daha fazla bilgi için bkz. Rx'te Ana Arabirimleri Keşfetme.>< Rx'teki farklı özellikleri kullanma öğreticileri için bkz. Rx kullanma.