This document discusses the evolution of asynchronous and parallel programming in C# code. It begins by covering synchronous code examples. It then covers asynchronous programming using async/await. Examples of parallel programming by starting multiple asynchronous tasks concurrently are also provided. The document then introduces Azure Durable Functions as a way to distribute asynchronous and parallel code across multiple servers. It provides examples of common Durable Functions patterns like chaining functions, fan-out/fan-in, external events, and timers. Overall it shows how programming models have evolved from synchronous to asynchronous to parallel and now to distributed using serverless platforms like Durable Functions.