Typically, when we have multiple unrelated asynchronous tasks, we want to
execute them concurrently and possibly combine the results when all tasks are
completed. Occasionally, though, concurrent execution is not possible, and we
need to execute each task only after the previous is completed. One example of
this is calling an API that accepts only one connection (we ran into this when
trying to upload multiple attachments via Zendesk SDK). The API that we want
then is exactly the same as with co