Right, so it's less efficient than async.
Async would let you yield at the gather.
Async would let you yield at the gather.
Taking into account that an async/await runtime also needs to switch to a different "context", the performance difference really shouldn't be all that big, especially if the task scheduler uses fibers (YMMV of course).