A task supports for instance the property IsCompleted and a Status containing a TaskStatus value of which several can be completed i.e. completed with or without fault.
https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx[
^]
The Task.WaitAll takes an array of tasks and waits for all of them to complete.
https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx[
^]
In the very unlikely case that a Task will actually spin up and return before the next statement in the crating code, the implementation of WaitAll will still wait until all have completed and in this case the first check for completion succeeds and the code will simply continue from the next line. In your example code 'nothing' will happen as you did not include the next statement, which is just the same as if indeed it took marginally longer to complate than the await to enter it's monitor loop