Introduced wait_for_report() that will recursively wait for all tasks to be done

Each asyncronous call returns a call report that has list of tasks to be executed.
It can happend that task itself can have spawned tasks.