A deliver is when you deliver activities (or baselines) on one stream to another.
The process might involve merging files and will cause files to be checked out on the target stream.
These files will remain checked out and thus isolate the changes from others until you choose to complete (or cancel) the deliver which in turn is the equivalent of checking in or undo checkout of the altered files.
Delivers are not atomic. From the point where you initiate the deliver and until you choose to complete it, you may span an infinite amount of time, and even the fastest and automated delivers even in the smallest of configurations may take a few seconds.
This is potentially a problem when you try to use deliver operations as reference points. They aren't actually stable until the are entirely completed.
Baselines as alternatives - are much better for stable references.