Oops, thanks for that - seems the results from the first run of the example somehow got lost in the final version and I didn't notice.
The order of the output is dependent on when each call finished - they run in parallel, so it's not guaranteed that functions will end in the order they were invoked.
Also, the code says it will print the time taken since the start of the program, which again doesn't go with the output and the conclusion being made!
Anyway, how come the output isn't in order?