Part 1: Introduction to Threading in .NET
Chapter 1: Managed Threading Concepts
When should we use multithreading in .NET?
What is managed threading?
Creating and destroying threads
Destroying managed threads
Handling threading exceptions
Synchronizing data across threads
Synchronizing code regions
Scheduling and canceling work
Scheduling managed threads
Canceling managed threads
Chapter 2: Evolution of Multithreaded Programming in .NET
NET threading through the years
C# 4 and .NET Framework 4.0
C# 5 and 6 and .NET Framework 4.5.x
Introduction to parallelism
Introduction to concurrency
Basics of async and await
Understanding the async keyword
Choosing the right path forward
Chapter 3: Best Practices for Managed Threading
Static data and constructors
Controlling shared access to static objects
Managing deadlocks and race conditions
Threading limits and other recommendations
Chapter 4: User Interface Responsiveness and Threading
Leveraging background threads
Which threads are background threads?
Using async, await, tasks, and WhenAll
Updating the UI thread without exceptions
Part 2: Parallel Programming and Concurrency with C#
Chapter 5: Asynchronous Programming with C#
More about asynchronous programming in .NET
Working with Task objects
Exploring Task properties
Interop with synchronous code
Executing async from synchronous methods
Executing synchronous code as async
Working with multiple background tasks
Asynchronous programming best practices
Chapter 6: Parallel Programming Concepts
Getting started with the TPL
Basic Parallel. For loops
Parallel loops with thread-local variables