IEnumerable<T> GetData() Async Task<T> GetData() IObservable<T> GetData() e se vogliamo processare in asincrono una collection senza attendere di avere tutti i dati? e se non sappiamo a priori quando dovremo farlo?
IEnumerator che ci permette di iterare su una collection e ha questi metodi e proprietà: • bool MoveNext() : avanza all’elemento successivo e ritorna true o false (se esiste o no) • T Current{ get; } : ritorna l’elemento corrente • throws Exception : la chiamata a Current può generare eccezione se l’elemento non esiste • void Dispose() : rilascia le risorse utilizzate dall’enumerator pull model
nell’interfaccia IObserver : • void OnCompleted(): notifica l’osservatore che il provider ha finito di mandare dati • void OnNext(T) : rende disponibile un nuovo elemnto all’osservatore • void OnError(Exception) : notifica l’osservatore che c’è stato un errore push model x time
sottoscritta • gli item emessi non sono condivisi tra gli osservatori Hot • emette item indipendentemente dall’esistenza di un osservatore • gli item sono condivisi tra tutti gli osservatori Cold vs Hot observables
singola astrazione ci permette di gestire qualsiasi stream possiamo trattare stream di eventi comenormali collection componibile: le query utilizzano diversi operatori e si possono comporre, il flusso è chiaro dichiarativa: specifica cosa fa il codice, non come lo fa trasformativa: le query possono trasforamre dati da un tipo ad un altro dal punto di vista dell’observer l’implementazione non importa à disaccoppiamento Quali vantaggi?