The Core of .NET, Hands-On Labs

M02 Hands-on Lab: Asynchronous and Parallel Programming in C#

08/07/2023

9:00am - 6:00pm

Level: Intermediate

Jeremy Clark

Developer Educator

JeremyBytes.com

Asynchronous programming is a critical skill to take full advantage of today's multi-core systems. But async programming brings its own set of issues. In this workshop, we'll work through some of those issues and get comfortable using parts of the .NET Task Parallel Library (TPL).

We'll start by calling asynchronous methods using the Task Asynchronous Pattern (TAP), including how to handle exceptions and cancellation. With this in hand, we'll look at creating our own asynchronous methods and methods that use asynchronous libraries. Along the way, we'll see how to avoid deadlocks, how to isolate our code for easier async, and why it's important to stay away from "asyc void".

In addition, we'll look at some patterns for running code in parallel, including using Parallel.ForEachAsync, channels, and other techniques. We'll see pros and cons so that we can use the right pattern for a particular problem.

Throughout the day, we'll go hands-on with lab exercises to put these skills into practice.

Objectives:

  • Use asynchronous methods with Task and await
  • Create asynchronous methods and libraries
  • How to avoid deadlocks and other pitfalls
  • Understand different parallel programming techniques

You will learn:

  • How to use asynchronous methods with Task and await
  • How to avoid deadlocks and other pitfalls
  • To understand different parallel programming techniques

Pre-Requisites:

Basic understanding of C# and object-oriented programming (classes, inheritance, methods, and properties). No prior experience with asynchronous programming is necessary; we'll take care of that as we go.

Attendee Requirements:

  • You must provide your own laptop computer (Windows or Mac) for this hands-on lab.
  • You need to have the .NET 6 SDK or .NET 7 SDK installed as well as the code editor of your choice (Visual Studio 2022 Community Edition or Visual Studio Code are both good (free) choices).
  • Interactive labs, web application samples, and console samples will work with Windows, macOS, and Linux (anywhere .NET 6/7 will run).
  • WPF desktop samples will only work on Windows machines. There are equivalent web and console examples for these projects.

Links: