Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET'te gözlemci tasarım deseni bir dizi arabirim olarak uygulanır. Arabirim System.IObservable<T> , gözlemcilerin bildirim aboneliğini kaldırmasına olanak tanıyan bir IDisposable uygulama sağlamaktan da sorumlu olan veri sağlayıcısını temsil eder. Arabirim System.IObserver<T> gözlemciyi temsil eder. Bu konu başlığında, geliştiricilerin bu arabirimleri kullanarak gözlemci tasarım desenini uygularken izlemesi gereken en iyi yöntemler açıklanmaktadır.
İplilik
Genellikle bir sağlayıcı IObservable<T>.Subscribe , bir koleksiyon nesnesi tarafından temsil edilen bir abone listesine belirli bir gözlemci ekleyerek yöntemini uygular ve belirli bir gözlemciyi IDisposable.Dispose abone listesinden kaldırarak yöntemini uygular. Bir gözlemci bu yöntemleri istediği zaman çağırabilir. Buna ek olarak, sağlayıcı/gözlemci sözleşmesi geri çağırma yönteminden sonra üyeyi /c0> listeden çıkarmaktan kimin sorumlu olduğunu belirtmediğinden, sağlayıcı ve gözlemci aynı öğeyi listeden kaldırmayı deneyebilir. Bu olasılık nedeniyle hem Subscribe hem de Dispose yöntemleri iş parçacığı güvenli olmalıdır. Bu genellikle eşzamanlı koleksiyon veya kilit kullanmayı içerir. İş parçacığı güvenliği olmayan uygulamalar, bu durumlarını açıkça belirtmelidir.
Ek garantiler, sağlayıcı/gözlemci sözleşmesinin üzerindeki bir katmanda belirtilmelidir. Uygulayıcılar, gözlemci sözleşme hakkında kullanıcı karışıklığını önlemek için ek gereksinimler getirdiğinde açıkça çağrı yapmalıdır.
Özel Durumları İşleme
Veri sağlayıcısı ile gözlemci arasındaki gevşek bağlantı nedeniyle, gözlemci tasarım düzenindeki özel durumların bilgilendirici olması amaçlanmıştır. Bu, sağlayıcıların ve gözlemcilerin gözlemci tasarım düzenindeki özel durumları nasıl işlediğini etkiler.
Sağlayıcı—OnError Yöntemini Çağırma
OnError yöntemi, yöntemine çok benzer IObserver<T>.OnNext şekilde gözlemcilere bilgilendirme iletisi olarak tasarlanmıştır. OnNext Ancak, yöntem geçerli veya güncelleştirilmiş verileri bir gözlemci sağlamak için tasarlanmıştırkenOnError, yöntem sağlayıcının geçerli veri sağlayamadığını göstermek için tasarlanmıştır.
Sağlayıcı, özel durumları işlerken ve yöntemini çağırırken şu en iyi yöntemleri izlemelidir OnError :
Sağlayıcının, belirli gereksinimleri varsa kendi istisnalarını işlemesi gerekir.
Sağlayıcı, gözlemcilerin özel durumları belirli bir şekilde işlemesini beklememeli veya gerektirmemelidir.
Sağlayıcı, güncellemeler sağlama yeteneğini tehlikeye atan bir istisnayı işlediğinde OnError yöntemini çağırmalıdır. Bu tür özel durumlarla ilgili bilgiler gözlemciye geçirilebilir. Diğer durumlarda, bir özel durumu gözlemcilere bildirmeye gerek yoktur.
Sağlayıcı OnError veya IObserver<T>.OnCompleted yöntemini çağırdıktan sonra başka bildirim olmamalıdır ve sağlayıcı gözlemcilerin aboneliklerini iptal edebilir. Ancak, gözlemciler, OnError veya IObserver<T>.OnCompleted bildirimini almadan önce veya aldıktan sonra dahil olmak üzere, istedikleri zaman abonelikten çıkabilirler. Gözlemci tasarım düzeni, sağlayıcının veya gözlemcinin abonelikten çıkmaktan sorumlu olup olmadığını belirlemez; Bu nedenle, her ikisinin de abonelikten çıkma girişiminde bulunma olasılığı vardır. Genellikle, gözlemciler aboneliği kaldırdığında abone koleksiyonundan kaldırılırlar. Tek iş parçacıklı bir uygulamada, IDisposable.Dispose implementasyonu, kaldırmayı denemeden önce nesne referansının geçerli olduğundan ve nesnenin aboneler koleksiyonunun bir üyesi olduğundan emin olmalıdır. Çok iş parçacıklı bir uygulamada, iş parçacığı güvenli bir koleksiyon nesnesi, örneğin System.Collections.Concurrent.BlockingCollection<T> nesnesi, kullanılmalıdır.
Gözlemci— OnError Yönteminin Uygulanması
Bir gözlemci bir sağlayıcıdan hata bildirimi aldığında, gözlemci özel durumu bilgilendirici olarak değerlendirmeli ve belirli bir eylemde bulunması gerekmemelidir.
Gözlemci, sağlayıcıdan bir OnError yöntem çağrısına yanıt verirken şu en iyi yöntemleri izlemelidir:
Gözlemci, OnNext veya OnError gibi arabirim uygulamalarından özel durumlar oluşturmamalıdır. Ancak, gözlemci özel durumlar oluşturursa, bu özel durumların ele alınmamasını beklemelidir.
Çağrı yığınını korumak için, yöntemine geçirilen Exception nesneyi fırlatmak isteyen bir OnError gözlemci, özel durumu fırlatmadan önce sarmalamalıdır. Bu amaç için standart bir özel durum nesnesi kullanılmalıdır.
Ek En İyi Yöntemler
IObservable<T>.Subscribe yönteminde kaydını kaldırmaya çalışmak, boş bir başvuruya neden olabilir. Bu nedenle, bu uygulamadan kaçınmanızı öneririz.
Birden çok sağlayıcıya gözlemci eklemek mümkün olsa da, önerilen desen yalnızca bir IObserver<T> örneğini bir IObservable<T> örneğine eklemektir.