IObservable<T>.Subscribe(IObserver<T>) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通知提供程序观察程序将接收通知。
public:
 IDisposable ^ Subscribe(IObserver<T> ^ observer);public IDisposable Subscribe (IObserver<out T> observer);abstract member Subscribe : IObserver<'T> -> IDisposablePublic Function Subscribe (observer As IObserver(Of Out T)) As IDisposable参数
- observer
- IObserver<T>
将接收通知的对象。
返回
对接口的引用,它允许观察程序在提供程序完成发送通知前停止接收通知。
示例
以下示例演示 Subscribe 报告纬度和经度信息的应用程序的方法。 它定义一个 IList<T> 集合对象,该对象存储对所有观察程序的引用。 它还返回一 Unsubscriber 个名为实现接口的 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> 实现做出任何假设,例如多个观察程序将收到的通知顺序。