IObservable<T>.Subscribe(IObserver<T>) Metode

Definisi

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.

Berlaku untuk

Lihat juga