19
可觀察是否當量/不如在Event type 事件及FSharp
- 與Event module對事件的publish財產
功能似乎等同,我猜這個區別是'語義':
- 我們是否在邊界內部有權訪問事件的內部狀態 ?
- 或者,我們考慮這個event interface爲被動源從中流暴露給我們
是正確的思維?
可觀察是否當量/不如在Event type 事件及FSharp
功能似乎等同,我猜這個區別是'語義':
是正確的思維?
Event
和Observable
之間的主要區別在於它們如何處理狀態和取消訂閱。
事件功能附加到源事件,不給你任何退訂方式。如果你使用有狀態的組合器(如Event.scan
),然後將多個觀察者附加到結果事件中,那麼他們將看到相同的狀態。
可觀察函數構造處理管道的「規範」。當您將一個處理程序附加到IObservable
值時,您會收回一個IDisposable
,該值可用於刪除所有處理程序。與IObservable
相連的每個處理程序都將獲得一個新狀態(因爲運行時根據「規範」創建了一個新的處理鏈)。
在實踐中,主要的區別是在statfullness - 如果你想分享的狀態,您可以使用Event
模塊 - 實現相同的使用Observable
是可能的,但更難。
如果您使用內async
事件,那麼你應該使用Observable
和AwaitObservable
(而不是內置AwaitEvent
),因爲使用事件組合程序將導致內存泄漏 - 它會附上沒有拆除事件處理程序。
這個差距起初並不明顯,而且單詞(E)事件相當重載。 – nicolas 2013-03-21 14:27:08
@Nicolas這是真的。它出於歷史原因(F#在'IObservable'存在之前有'Event'模塊 - 也許正確的是刪除它)。但說實話,如果.NET首先沒有特殊的「事件」,事情就會變得更加容易,但這已經在很久以前就已經決定了:-)。 – 2013-03-21 16:56:35