IObservable<T>.Subscribe(IObserver<T>) メソッド

定義

オブザーバーが通知を受け取ることをプロバイダーに通知します。Notifies the provider that an observer is to receive notifications.

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>

通知を受け取るオブジェクト。The object that is to receive notifications.

戻り値

IDisposable

プロバイダーが通知の送信を完了する前に、オブザーバーが通知の受信を停止できるインターフェイスへの参照。A reference to an interface that allows observers to stop receiving notifications before the provider has finished sending them.

次の例は、緯度と経度の情報を報告するアプリケーションの Subscribe 方法を示しています。The following example illustrates the Subscribe method for an application that reports latitude and longitude information. すべてのオブザーバーへの参照を格納する IList<T> collection オブジェクトを定義します。It defines an IList<T> collection object that stores references to all observers. また、IDisposable インターフェイスを実装する Unsubscriber という名前のプライベートクラスを返し、サブスクライバーがイベント通知の受信を停止できるようにします。It also returns a private class named Unsubscriber that implements the IDisposable interface and enables subscribers to stop receiving event notifications. 完全な例については、IObservable<T> のトピックの「例」を参照してください。See the Example section of the IObservable<T> topic for the complete example.

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);
   }
}
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 メソッドを呼び出す必要があります。The Subscribe method must be called to register an observer for push-based notifications. Subscribe メソッドの一般的な実装では、次のことを行います。A typical implementation of the Subscribe method does the following:

  • このメソッドは、List<T> オブジェクトなどのコレクションオブジェクトにオブザーバーへの参照を格納します。It stores a reference to the observer in a collection object, such as a List<T> object.

  • IDisposable インターフェイスへの参照を返します。It returns a reference to an IDisposable interface. これにより、オブザーバーは、プロバイダーがサブスクリプションの送信を終了し、サブスクライバーの OnCompleted メソッドと呼ばれる前に、通知の受信を停止することができます。This enables observers to unsubscribe (that is, to stop receiving notifications) before the provider has finished sending them and called the subscriber's OnCompleted method.

任意の時点で、IObservable<T> の実装の特定のインスタンスが、すべてのサブスクリプションを処理し、すべてのサブスクライバーに通知する役割を担います。At any given time, a particular instance of an IObservable<T> implementation is responsible for handling all subscriptions and notifying all subscribers. 特定の IObservable<T> の実装に関するドキュメントで特に指定されていない限り、オブザーバーは、複数のオブザーバーが受信する通知の順序など、IObservable<T> の実装について想定しません。Unless the documentation for a particular IObservable<T> implementation indicates otherwise, observers should make no assumptions about the IObservable<T> implementation, such as the order of notifications that multiple observers will receive.

適用対象

こちらもご覧ください