c# is a bloated nightmare, who thought it was a good idea to add async/await on top of the existing threading model?