Refs

Refs provide concurrency support for effect types. In fs2, the effect type is often a Task. However, effect types are also Options, Futures and even Lists (the effect of multiple choice/options). Really, an effect is usually a container of a value that may have other characteristics e.g. asynchronous creation of that value. Refs are more of an implementation detail compared to the streams api.

Refs use a "messaging" model to set or get the value in a Ref. Underneath the hood, you can think of it is as actor model for one value. Actors were designed, among other things, to protect state behind a wall of "messages." If you try to get or set the value inside a Ref, a message is sent internally to perform the get or set. Messages can be processed in order so that the stream of get/set messages are processed in a sensible fashion.

Last updated