May I suggest a simple code change here, for consideration by the group?
In the async_status module, always return the 'finished' attribute (with a 0 or 1 value) instead of doing so ONLY when the job is finished. This would make it trivial to perform the parallelization/waiting that today is not available, using the do...until mentioned in the original post. The code change to async_status would probably be as simple as changing line 84:
module.exit_json(results_file=log_path, ansible_job_id=jid, started=1, finished=0)
More general question: how would I check for the presence of an attribute on a result register?