IObservable<T>.Subscribe(IObserver<T>) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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.