await isn't an alternative to TPL/Tasks, it's a feature that improves a certain common use case of TPL/Tasks. "await foo" means (roughly[1]) "yield and schedule the current continuation to be run on completion of foo". What really requires language support is the "current continuation" bit, which starts to become tricky/convoluted to express directly once control flow comes in.
For any use case other than this there are other tools, such as WaitAll/WaitAny as you say.
[1] http://stackoverflow.com/questions/4070237/how-could-the-new...