IObservable<T>.Subscribe(IObserver<T>) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Notifica al proveedor que un observador recibirá las notificaciones.
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
Parámetros
- observer
- IObserver<T>
Objeto que recibirá las notificaciones.
Devoluciones
Referencia a una interfaz que permite a los observadores dejar de recibir notificaciones antes de que el proveedor haya terminado de enviarlas.
Ejemplos
En el ejemplo siguiente se muestra el Subscribe método de una aplicación que informa de la información de latitud y longitud. Define un IList<T> objeto de colección que almacena referencias a todos los observadores. También devuelve una clase privada denominada Unsubscriber
que implementa la IDisposable interfaz y permite a los suscriptores dejar de recibir notificaciones de eventos. Consulte la sección Ejemplo del IObservable<T> tema para obtener el ejemplo completo.
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
Comentarios
Se Subscribe debe llamar al método para registrar un observador para las notificaciones basadas en inserción. Una implementación típica del Subscribe método hace lo siguiente:
Almacena una referencia al observador en un objeto de colección, como un List<T> objeto .
Devuelve una referencia a una IDisposable interfaz. Esto permite a los observadores cancelar la suscripción (es decir, dejar de recibir notificaciones) antes de que el proveedor haya terminado de enviarlos y llamar al método del OnCompleted suscriptor.
En un momento dado, una instancia determinada de una IObservable<T> implementación es responsable de controlar todas las suscripciones y notificar a todos los suscriptores. A menos que la documentación de una implementación determinada IObservable<T> indique lo contrario, los observadores no deben realizar ninguna suposición sobre la IObservable<T> implementación, como el orden de las notificaciones que recibirán varios observadores.