You would never actually use the Do...Loop in your program. Calling a method asynchronously and then doing a Do...Loop to wait for the task to complete is just an over-complicated way to duplicate a synchronous call.
The Do...Loop exists so that one can see how the results of the task are obtained after it's completed.
In actuality, you would start the task, and then some other part of your application might check on the task to see if it's finished.