This document discusses asynchronous programming in C# 5.0 using the async and await keywords. It provides an overview of asynchronous programming models that preceded async/await such as Asynchronous Programming Model and Event-based Asynchronous Pattern. It describes how async methods allow code to appear synchronous while tasks execute asynchronously without blocking threads. The await keyword signs up the rest of the method as a continuation when awaiting tasks. Async methods return Task, Task<T>, or void and conventions suggest naming async methods with a suffix of "Async".