Technical requirementsUnderstanding the jargonDemystifying threads, lazy initialization, and ThreadPoolWorking with System.Threading.ThreadThreadPoolLazy initializationUnderstanding locks, semaphores, and SemaphoreSlimThe critical section and thread safetyIntroducing locksMutex (Windows only)Introducing semaphores and SemaphoreSlimChoosing the right synchronization constructsIntroducing tasks and parallelsIntroduction to Task and the TPLHandling task exceptionsImplementing task cancellationImplementing continuationsSynchronizationContextTaskSchedulerImplementing data parallelismUsing Parallel LINQ (PLINQ)Introducing async-awaitThe task-based asynchronous patternPrinciples of using async-awaitAsync streams with IAsyncEnumerableThreadPool starvationUsing concurrent collections for parallelismConcurrentDictionaryProducer-consumer concurrent collectionsThe BlockingCollection<T> classSummaryQuestionsFurther reading