IObservable<T>.Subscribe(IObserver<T>) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Sağlayıcıya bir gözlemcinin bildirim alacağını bildirir.
public:
IDisposable ^ Subscribe(IObserver<T> ^ observer);
public IDisposable Subscribe (IObserver<out T> observer);
abstract member Subscribe : IObserver<'T> -> IDisposable
Public Function Subscribe (observer As IObserver(Of Out T)) As IDisposable
Parametreler
- observer
- IObserver<T>
Bildirim alacak nesne.
Döndürülenler
Sağlayıcı göndermeyi bitirmeden önce gözlemcilerin bildirimleri almayı durdurmasını sağlayan bir arabirim başvurusu.
Örnekler
Aşağıdaki örnekte, enlem ve boylam bilgilerini bildiren bir uygulamanın yöntemi gösterilmektedir Subscribe . Tüm gözlemcilere başvuruları depolayan bir IList<T> koleksiyon nesnesi tanımlar. Ayrıca arabirimini uygulayan ve abonelerin IDisposable olay bildirimlerini almayı durdurmasını sağlayan adlı Unsubscriber
bir özel sınıf döndürür. Tam örnek için konunun Örnek bölümüne IObservable<T> bakın.
private List<IObserver<Location>> observers;
public IDisposable Subscribe(IObserver<Location> observer)
{
if (! observers.Contains(observer))
observers.Add(observer);
return new Unsubscriber(observers, observer);
}
private class Unsubscriber : IDisposable
{
private List<IObserver<Location>>_observers;
private IObserver<Location> _observer;
public Unsubscriber(List<IObserver<Location>> observers, IObserver<Location> observer)
{
this._observers = observers;
this._observer = observer;
}
public void Dispose()
{
if (_observer != null && _observers.Contains(_observer))
_observers.Remove(_observer);
}
}
let observers = ResizeArray<IObserver<Location>>()
interface IObservable<Location> with
member _.Subscribe(observer) =
if observers.Contains observer |> not then
observers.Add observer
new Unsubscriber(observers, observer)
Private observers As List(Of IObserver(Of Location))
Public Function Subscribe(ByVal observer As System.IObserver(Of Location)) As System.IDisposable _
Implements System.IObservable(Of Location).Subscribe
If Not observers.Contains(observer) Then
observers.Add(observer)
End If
Return New Unsubscriber(observers, observer)
End Function
Private Class Unsubscriber : Implements IDisposable
Private _observers As List(Of IObserver(Of Location))
Private _observer As IObserver(Of Location)
Public Sub New(ByVal observers As List(Of IObserver(Of Location)), ByVal observer As IObserver(Of Location))
Me._observers = observers
Me._observer = observer
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
If _observer IsNot Nothing AndAlso _observers.Contains(_observer) Then
_observers.Remove(_observer)
End If
End Sub
End Class
Açıklamalar
Bir gözlemciyi Subscribe anında iletme tabanlı bildirimlere kaydetmek için yöntemi çağrılmalıdır. Yöntemin Subscribe tipik bir uygulaması aşağıdakileri yapar:
Gözlemciye başvuruyu nesne gibi List<T> bir koleksiyon nesnesinde depolar.
Bir arabirime IDisposable başvuru döndürür. Bu, sağlayıcı göndermeyi bitirmeden ve abonenin OnCompleted yöntemini çağırmadan önce gözlemcilerin abonelikten çıkmalarını (yani bildirimleri almayı durdurmalarını) sağlar.
Belirli bir zamanda, uygulamanın belirli bir IObservable<T> örneği tüm abonelikleri işlemek ve tüm aboneleri bilgilendirmek için sorumludur. Belirli IObservable<T> bir uygulamanın belgeleri aksini belirtmediği sürece, gözlemciler uygulama hakkında birden çok gözlemcinin IObservable<T> alacağı bildirimlerin sırası gibi bir varsayımda bulunmamalıdır.