IObservable<T>.Subscribe(IObserver<T>) 方法

定義

通知提供者觀察員將接收通知。

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 private class(私有類別)的 IPL,該類別實作介面 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> 作做出假設,例如多位觀察者會收到通知的順序。

適用於

另請參閱