La differenza principale tra Event
e Observable
riguarda il modo in cui gestiscono lo stato e l'annullamento della sottoscrizione.
Evento funzioni attribuiscono alla manifestazione di origine e non ti danno alcun modo per annullare l'iscrizione. Se si utilizzano combinatori stateful (come Event.scan
) e quindi si associano più osservatori all'evento risultante, allora tutti vedranno lo stesso stato.
Le funzioni osservabili costruiscono "specifiche" della pipeline di elaborazione. Quando si allega un gestore al valore IObservable
, si ottiene un IDisposable
che può essere utilizzato per rimuovere tutti i gestori. Ogni gestore collegato a IObservable
riceverà un nuovo stato (poiché il runtime crea una nuova catena di elaborazione in base alla "specifica").
In pratica, la differenza principale è nella statfullness - se si desidera condividere lo stato, è possibile utilizzare il modulo Event
- attuando la stessa utilizzando Observable
è possibile ma difficile.
Se stai usando gli eventi all'interno async
, quindi si dovrebbe utilizzare Observable
e AwaitObservable
(invece di built-in AwaitEvent
), perché l'utilizzo di combinatori evento sarà una perdita di memoria - che attribuirà i gestori di eventi che non vengono mai rimossi.
fonte
2013-03-21 14:08:43
La differenza è lungi dall'essere ovvia in un primo momento, e l'evento di parola (E) è piuttosto sovraccarico. – nicolas
@Nicolas È vero. Ne consegue da ragioni storiche (F # aveva il modulo 'Event' prima che esistesse' IObservable' - e forse la cosa giusta era rimuoverlo). Ma, ad essere onesti, le cose sarebbero più facili se .NET non avesse "eventi" speciali in primo luogo, ma ciò è stato deciso troppo tempo fa :-). –