This document discusses new features in C# 5.0, with a focus on asynchronous programming using async and await. It begins with an overview of the evolution of C# from versions 1.0 to 5.0. It then demonstrates how to update a synchronous UI application to an asynchronous one using async and await. It shows how async avoids deadlocks and supports cancellation. Examples are provided for asynchronous console and unit test applications. The document also discusses new attributes for source code caller identification and breaking changes in C# 5.0. Resources for further reading are provided.