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

Definitie

Hiermee wordt de provider op de hoogte stelt dat een waarnemer meldingen moet ontvangen.

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

Parameters

observer
IObserver<T>

Het object dat meldingen ontvangt.

Retouren

Een verwijzing naar een interface waarmee waarnemers geen meldingen meer kunnen ontvangen voordat de provider klaar is met het verzenden ervan.

Voorbeelden

In het volgende voorbeeld ziet u de Subscribe methode voor een toepassing die informatie over breedtegraad en lengtegraad rapporteert. Het definieert een IList<T> verzamelingsobject waarin verwijzingen naar alle waarnemers worden opgeslagen. Het retourneert ook een privéklasse met de naam Unsubscriber die de IDisposable interface implementeert en stelt abonnees in staat om het ontvangen van gebeurtenismeldingen te stoppen. Zie de sectie Voorbeeld van het IObservable<T> onderwerp voor het volledige voorbeeld.

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

Opmerkingen

De Subscribe methode moet worden aangeroepen om een waarnemer te registreren voor pushmeldingen. Een typische implementatie van de Subscribe methode doet het volgende:

  • Er wordt een verwijzing naar de waarnemer opgeslagen in een verzamelingsobject, zoals een List<T> object.

  • Het retourneert een verwijzing naar een IDisposable interface. Hierdoor kunnen waarnemers zich afmelden (dat wil zeggen dat ze geen meldingen meer ontvangen) voordat de provider klaar is met het verzenden ervan en de methode van OnCompleted de abonnee aangeroepen.

Op elk gewenst moment is een bepaald exemplaar van een IObservable<T> implementatie verantwoordelijk voor het afhandelen van alle abonnementen en het melden van alle abonnees. Tenzij in de documentatie voor een bepaalde IObservable<T> implementatie anders wordt aangegeven, mogen waarnemers geen aannames doen over de IObservable<T> implementatie, zoals de volgorde van meldingen die meerdere waarnemers ontvangen.

Van toepassing op

Zie ook