IObservable<T>.Subscribe(IObserver<T>) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オブザーバーが通知を受け取ることをプロバイダーに通知します。
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>
通知を受け取るオブジェクト。
戻り値
プロバイダーが通知の送信を完了する前に、オブザーバーが通知の受信を停止できるインターフェイスへの参照。
例
次の例は、緯度と経度の Subscribe 情報を報告するアプリケーションの方法を示しています。 すべてのオブザーバーへの参照を IList<T> 格納するコレクション オブジェクトを定義します。 また、インターフェイスを実装し、サブスクライバーがイベント通知の受信をIDisposable停止できるようにする、という名前Unsubscriber
のプライベート クラスも返します。 完全な例については、トピックの 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> する仮定を行う必要はありません。