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> 가정하지 않아야 합니다.