23. **Promises**: deferring work
********************************

This package provides a way to synchronize work between some
asynchronous workers (or threads).

Promises are a way to encapsulate a yet unknown value, immediately
return to the caller, and work in the background to actually execute
the work.

For instance, you could have a function that reads some data from a
socket. This takes time, and we do not want to block the application
while retrieving the data (and if there is an error retrieving it, we
certainly want to properly handle it).

The main thread (for instance a graphical user interface) needs to
keep processing events and refresh itself. As soon as the data becomes
available from the socket, we should let this main thread know so that
it can take further action, like post-processing the data and then
displaying it.

A general scheme to do that is to have a callback function that is
called whenever the work is finished. Promises build on that simple
idea so that you can easily chain multiple callbacks to build more
complex actions.

See the extensive documentation in "gnatcoll-promises.ads"
