2010-07-06 10 views
38

Microsoft ha introdotto lo IObservable<T> interface nel BCL con .NET Framework 4 e ho pensato: "Ottimo, finalmente, devo usarlo!" Così ho scavato in profondità e ho letto post e documentazione e ho persino implementato il pattern.IObservable vs Plain Event o Perché dovrei usare IObservable?

Dopo averlo fatto, ho realizzato che l'implementazione di base invia effettivamente tutti gli eventi T a tutti i suoi abbonati senza alcun filtro su di esso; cioè trasmissione semplice. Ho letto da qualche parte che il pattern Observable è pensato per trasmissioni semplici. Sento che questo non è vero e che mi manca qualcosa.

Le mie domande:

  1. Se posso aggiungere un meccanismo di filtraggio, qual è la differenza tra l'utilizzo del modello osservabile e usando solo gli eventi CLR semplici?

  2. Quando si dovrebbe utilizzare questo modello e quando si dovrebbe scegliere di utilizzare eventi CLR semplici?

  3. Quali sono i principali vantaggi del modello Osservabile?

risposta

27

Osservabile è la pietra angolare di Rx library. Forniscono praticamente tutte le implementazioni e gli operatori necessari. L'idea alla base di IObservable<T> e Rx non è solo la "gestione" degli eventi, ma l'abilitazione di "LINQ agli eventi". In questo modo puoi facilmente comporre "flussi di eventi", che ti danno molta energia rispetto alla normale gestione degli eventi.

Si noti che l'implementazione MSDN di esempio di IObservable<T> è incorrect; il team doc è stato avvisato.

+1

hi grazie per la risposta, la prego di elaborare più di "abilitazione 'LINQ to Events'. Così si può facilmente comporre 'flussi di eventi', o fare un esempio? Adiel. –

+2

La [pagina wiki Rx] (http://rxwiki.wikidot.com/101samples#toc15) ha diversi tipi di esempi LINQ to Events. C'è anche il famoso "drag and drop" [video] (http://channel9.msdn.com/posts/J .Van.Gogh/Writing-your-first-Rx-Application /). –

+0

+0 Scommetto che hai una visione approfondita del numero 2 che non hai fornito: P –

Problemi correlati