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