IObservable<T>.Subscribe(IObserver<T>) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Memberi tahu penyedia bahwa pengamat akan menerima pemberitahuan.
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
Parameter
- observer
- IObserver<T>
Objek yang akan menerima pemberitahuan.
Mengembalikan
Referensi ke antarmuka yang memungkinkan pengamat berhenti menerima pemberitahuan sebelum penyedia selesai mengirimnya.
Contoh
Contoh berikut mengilustrasikan Subscribe metode untuk aplikasi yang melaporkan informasi lintang dan bujur. Ini mendefinisikan IList<T> objek koleksi yang menyimpan referensi ke semua pengamat. Ini juga mengembalikan kelas privat bernama Unsubscriber yang mengimplementasikan IDisposable antarmuka dan memungkinkan pelanggan untuk berhenti menerima pemberitahuan peristiwa. Lihat bagian IObservable<T> Contoh topik untuk contoh lengkapnya.
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
Keterangan
Metode Subscribe harus dipanggil untuk mendaftarkan pengamat untuk pemberitahuan berbasis push. Implementasi umum metode Subscribe melakukan hal berikut:
Ini menyimpan referensi ke pengamat dalam objek koleksi, seperti List<T> objek.
Ini mengembalikan referensi ke IDisposable antarmuka. Ini memungkinkan pengamat untuk berhenti berlangganan (yaitu, untuk berhenti menerima pemberitahuan) sebelum penyedia selesai mengirimnya dan memanggil metode pelanggan OnCompleted .
Pada waktu tertentu, instans IObservable<T> implementasi tertentu bertanggung jawab untuk menangani semua langganan dan memberi tahu semua pelanggan. Kecuali dokumentasi untuk implementasi tertentu IObservable<T> menunjukkan sebaliknya, pengamat tidak boleh membuat asumsi tentang IObservable<T> implementasi, seperti urutan pemberitahuan yang akan diterima beberapa pengamat.