IObservable<T>.Subscribe(IObserver<T>) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
通知提供者,觀察者將接收通知。
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
參數
- observer
- IObserver<T>
要接收通知的物件。
傳回
可讓觀察者在提供者完成傳送通知之前停止接收通知的介面的參考。
範例
下列範例說明 Subscribe 報告緯度和經度資訊之應用程式的方法。 它會定義 IList<T> 集合物件,以儲存所有觀察者參考。 它也會傳回名為 的私人 Unsubscriber
類別,這個類別會 IDisposable 實作 介面,並讓訂閱者停止接收事件通知。 如需完整範例, IObservable<T> 請參閱主題的範例一節。
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
備註
Subscribe必須呼叫 方法,才能註冊推播式通知的觀察者。 方法的一般實作 Subscribe 會執行下列動作:
它會將觀察者的參考儲存在集合物件中,例如 List<T> 物件。
它會傳回介面的 IDisposable 參考。 這可讓觀察者取消訂閱 (,也就是在提供者完成傳送通知並呼叫訂閱者的 OnCompleted 方法之前,停止接收通知) 。
在任何指定的時間,實作的特定 IObservable<T> 實例都會負責處理所有訂用帳戶,並通知所有訂閱者。 除非特定 IObservable<T> 實作的檔另有指示,否則觀察者不應假設 IObservable<T> 實作,例如多個觀察者將接收的通知順序。