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.

반환

공급자가 알림 보내기를 완료하기 전에 관찰자가 알림 수신을 중지할 수 있도록 허용하는 인터페이스에 대한 참조입니다.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.

적용 대상

추가 정보