This document provides an overview of asynchronous programming using the async and await keywords introduced in C# 5, and the Task-based Asynchronous Pattern (TAP). It discusses earlier approaches to asynchronous programming that were disruptive and error-prone. The new approach uses tasks to represent ongoing asynchronous work, and the async and await keywords to allow asynchronous code to look synchronous. Key aspects covered include using the async modifier on methods, awaiting tasks, task states, cancellation, progress reporting, and building task-based combinators.