Если возникают периодические события, как то через WebSocket сервер что-то передает, и вам нужно это отобразить в контрактах системы.
Существует стандартный механизм — механизм событий. Он как бы официально встроен в язык C# и всем понятен. Но минусы есть:
1. Событие нельзя вернуть как результат работы метода. К примеру, вы хотите передать в метод некоторые параметры, чтобы отфильтровать события — этого сделать нельзя, т.к. события привязаны ко всему инстансу.
2. Не всегда уместный синтаксист — sender, eventArgs — не важен sender и вместо eventArgs хотелось бы вернуть что-то концентрированное.
3. Можно забыть отписаться и это будет удерживать GC очистки.
IObservable лишен всех этих недостатков. Однако же он не является общепринятым и многие вообще не понимают его.