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> 모든 관찰자에 대 한 참조를 저장 하는 컬렉션 개체입니다.It defines an IList<T> collection object that stores references to all observers. 라는 private 클래스도 반환 Unsubscriber 를 구현 하는 IDisposable 인터페이스 및 구독자가 이벤트 알림 수신을 중지할 수 있습니다.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.

적용 대상

추가 정보