Ответ 1
Основное различие между Event
и Observable
заключается в том, как они обрабатывают состояние и не подписываются.
-
События присоединяются к исходному событию и не дают вам возможности отказаться от подписки. Если вы используете комбинаторы состояния (например,
Event.scan
), а затем присоедините несколько наблюдателей к результирующему событию, тогда все они будут видеть одно и то же состояние. -
Функции наблюдаемых строят "спецификацию" конвейера обработки. Когда вы прикрепляете обработчик к значению
IObservable
, вы возвращаетеIDisposable
, который можно использовать для удаления всех обработчиков. Каждый обработчик, прикрепленный кIObservable
, получит новое состояние (поскольку среда выполнения создает новую цепочку обработки в соответствии со "спецификацией" ).
На практике основное отличие заключается в statfullness - если вы хотите поделиться состоянием, вы можете использовать модуль Event
- реализовать то же самое с помощью Observable
возможно, но сложнее.
Если вы используете события внутри async
, тогда вы должны использовать Observable
и AwaitObservable
(вместо встроенного AwaitEvent
), потому что использование комбинаторов событий будет утечки памяти - оно будет прикреплять обработчики событий, которые никогда не удаляются.