Reactive programming with async workflows
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.
Note
The 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 IObservable
.
This means that we need constructs that can create observables, as opposed to only async workflows. Essentially, it should be possible to await all kinds of events produced by Event
or IObservable
streams. In this section, we will only go through the default options available in...