IObservable<T>.Subscribe(IObserver<T>) IObservable<T>.Subscribe(IObserver<T>) IObservable<T>.Subscribe(IObserver<T>) IObservable<T>.Subscribe(IObserver<T>) Method

Определение

Уведомляет поставщика о том, что наблюдатель должен получать уведомления. 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> IObserver<T> IObserver<T> 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. Он также возвращает закрытый класс с именем 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 Метод должен вызываться регистрируемый наблюдатель для Push-уведомлений.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.

Применяется к

См. также