IObservable<T>.Subscribe(IObserver<T>) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Notifica o provedor que um observador deve receber notificações.
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>
O objeto que receberá notificações.
Retornos
Uma referência a uma interface que permite que os observadores parem de receber notificações antes de o provedor terminar de enviá-los.
Exemplos
O exemplo a seguir ilustra o Subscribe método para um aplicativo que relata informações de latitude e longitude. Ele define um IList<T> objeto de coleção que armazena referências a todos os observadores. Ele também retorna uma classe privada chamada Unsubscriber
que implementa a interface e permite que os IDisposable assinantes parem de receber notificações de evento. Consulte a seção Exemplo do IObservable<T> tópico para obter o exemplo 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
Comentários
O Subscribe método deve ser chamado para registrar um observador para notificações baseadas em push. Uma implementação típica do Subscribe método faz o seguinte:
Ele armazena uma referência ao observador em um objeto de coleção, como um List<T> objeto.
Ele retorna uma referência a uma IDisposable interface. Isso permite que os observadores cancelem a assinatura (ou seja, parem de receber notificações) antes que o provedor termine de enviá-las e chamar o método do OnCompleted assinante.
A qualquer momento, uma instância específica de uma IObservable<T> implementação é responsável por lidar com todas as assinaturas e notificar todos os assinantes. A menos que a documentação de uma implementação específica IObservable<T> indique o contrário, os observadores não devem fazer suposições sobre a IObservable<T> implementação, como a ordem das notificações que vários observadores receberão.