How Async and Await work under the hood in C#



You use async/await keywords everyday when working with C#, but do you know how they work under the hood?
Do you know what exactly is Task and how it should be used?