My guess: the system keeps calling your function, and throws an exception whenever an asynchronous call needs to be made which was not yet handled. This exception is then caught inside the system to mark the asynchronous call as being done, and the next iteration starts.
Sometimes the website answers that. This one doesn't, and so I'm absolutely not going to use it, because I don't understand it.