IObservable<T>.Subscribe(IObserver<T>) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 aplikace, která hlásí informace o zeměpisné šířce a délce. Definuje IList<T> 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. Úplný příklad najdete v IObservable<T> části 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 List<T> objektu.
Vrátí odkaz na IDisposable rozhraní. To umožňuje pozorovatelům odhlásit odběr (tj. ukončit přijímání oznámení), než poskytovatel dokončí jejich odeslání a zavolá metodu odběratele OnCompleted .
V každém okamžiku IObservable<T> je konkrétní instance 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 neukazuje jinak, pozorovatelé by neměli provádět žádné předpoklady o IObservable<T> implementaci, například pořadí oznámení, které obdrží více pozorovatelů.