IObservable<T>.Subscribe(IObserver<T>) Metoda

Definice

Upozorní poskytovatele, že pozorovatel má dostávat oznámení.

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

Parametry

observer
IObserver<T>

Objekt, který má přijímat oznámení.

Návraty

Odkaz na rozhraní, které umožňuje pozorovatelům ukončit přijímání oznámení, než je poskytovatel dokončí.

Příklady

Následující příklad znázorňuje metodu Subscribe pro aplikaci, která hlásí informace o zeměpisné šířce a délce. IList<T> Definuje objekt kolekce, který ukládá odkazy na všechny pozorovatele. Vrátí také privátní třídu s názvem Unsubscriber , která implementuje IDisposable rozhraní a umožňuje odběratelům přestat přijímat oznámení o událostech. Kompletní příklad najdete v části IObservable<T> Příklad tématu.

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

Poznámky

Metoda Subscribe musí být volána k registraci pozorovatele pro nabízená oznámení. Typická implementace Subscribe metody provede následující:

  • Ukládá odkaz na pozorovatele v objektu kolekce, například objektu List<T> .

  • Vrátí odkaz na IDisposable rozhraní. To umožňuje pozorovatelům odhlásit odběr (tj. ukončit přijímání oznámení) před tím, než poskytovatel dokončí odesílání a zavolá metodu odběratele OnCompleted .

V každém okamžiku je konkrétní instance IObservable<T> implementace zodpovědná za zpracování všech předplatných a upozorňování všech odběratelů. Pokud dokumentace pro konkrétní IObservable<T> implementaci neuvádí jinak, pozorovatelé by neměli provádět žádné předpoklady o IObservable<T> implementaci, jako je například pořadí oznámení, které bude přijímat více pozorovatelů.

Platí pro

Viz také