We will now generalize the
async model so that it can be used not only in async workflows, but also with
IObservable streams to achieve reactiveness. The
IObservable interface is used to manipulate events as if they were sequences (or streams). The main difference with
IEnumerable is that the latter is pull-based (our code decides when to pull the next item from the sequence) while the former is push-based; we do not know when the next event will happen so we can only react to new inputs in the stream.
FSharp.Core library also provides functions in the
Event module to manipulate events directly, as if they were streams, without having to convert them to
This means that we need constructs ...