History and current status
- .NET Framework 1.1 - C# 1.1: Asynchronous Programming Model (APM).
- .NET Framework 2 - C# 2: Event Asynchronous Pattern (EAP).
- .NET Framework 4 - C# 4: Task Parallel Library (TPL). Mostly multi-threading oriented.
- .NET Framework 4.5 - C# 5: Asynchronous methods (async/await). Task Continuations are often not needed. Huge code noise reduction. Better support in the Basic Class Library (BCL). "Async" suffix in many methods. Mostly asynchronous programming oriented.
Today the preferred way to handle asynchronous programming is by using Tasks with async/await first and then TPL.
Caution! in the TPL world tasks are usually "Delegate tasks" (tied to threads) but async/await tasks are mostly "Promise tasks". See https://blog.stephencleary.com/2014/04/a-tour-of-task-part-0-overview.html
- Video tutorial: Task and Await in C#
- Best practices: https://scalablenotions.wordpress.com/2015/05/02/tpl-and-async-await-best-practices-for-the-busy-developer/
- Why use Task.Run instead BackgroundWorker: http://blog.stephencleary.com/2013/05/taskrun-vs-backgroundworker-intro.html
- Dataflow library: https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/dataflow-task-parallel-library