Grzegorz Lang
Asynchronicity and multithreading in C#
#1about 3 minutes
Understanding multithreading for CPU-intensive work
Multithreading allows CPU-intensive work to run in the background, but creating too many logical threads leads to expensive context switching.
#2about 3 minutes
Using the ThreadPool and Task abstraction
The ThreadPool manages threads for you, and the Task class provides a powerful abstraction for queuing work and retrieving results without blocking.
#3about 2 minutes
Creating and continuing tasks without blocking
Use Task.Run to create and start a hot task in one step, and use the ContinueWith method to process results without blocking the main thread.
#4about 1 minute
Implementing graceful cancellation with CancellationToken
A CancellationToken signals that an operation should be stopped, which can be handled by checking IsCancellationRequested or calling ThrowIfCancellationRequested.
#5about 2 minutes
How SynchronizationContext manages execution environments
SynchronizationContext is an abstraction for an environment, like a UI thread, allowing you to post work back to a specific context from a background thread.
#6about 2 minutes
The role of the TaskScheduler in C#
The TaskScheduler works with the SynchronizationContext to determine where a task's continuation should be executed, such as on the ThreadPool or a specific UI thread.
#7about 4 minutes
Introduction to asynchronicity with async and await
The async and await keywords simplify asynchronous programming for I/O-bound operations by allowing threads to be released instead of blocked while waiting.
#8about 1 minute
Running operations concurrently with Task.WhenAll
Start multiple asynchronous operations without awaiting them immediately and then use Task.WhenAll to wait for all of them to complete concurrently.
#9about 2 minutes
Choosing the right async return type
Avoid using async void, and consider using the allocation-free ValueTask struct instead of Task for performance-critical hot paths, but be aware of its usage limitations.
#10about 1 minute
Using ConfigureAwait to control context capturing
Use ConfigureAwait(false) in library code to prevent capturing the SynchronizationContext, making the library environment-agnostic and avoiding potential deadlocks.
#11about 4 minutes
Q&A: SynchronizationContext, tooling, and challenges
The Q&A session clarifies that frameworks like Blazor still use SynchronizationContext in .NET Core and discusses debugging tools like Visual Studio's Parallel Stacks.
Related jobs
Jobs that call for the skills explored in this talk.
Dennemeyer Group
Hesperange, Luxembourg
Intermediate
Senior
.NET
Structured Query Language (SQL)
Matching moments
03:17 MIN
Selecting strategic partners and essential event tools
Cat Herding with Lions and Tigers - Christian Heilmann
01:32 MIN
Organizing a developer conference for 15,000 attendees
Cat Herding with Lions and Tigers - Christian Heilmann
04:57 MIN
Increasing the value of talk recordings post-event
Cat Herding with Lions and Tigers - Christian Heilmann
04:49 MIN
Using content channels to build an event community
Cat Herding with Lions and Tigers - Christian Heilmann
02:44 MIN
Rapid-fire thoughts on the future of work
What 2025 Taught Us: A Year-End Special with Hung Lee
03:38 MIN
Balancing the trade-off between efficiency and resilience
What 2025 Taught Us: A Year-End Special with Hung Lee
03:39 MIN
Breaking down silos between HR, tech, and business
What 2025 Taught Us: A Year-End Special with Hung Lee
03:48 MIN
Automating formal processes risks losing informal human value
What 2025 Taught Us: A Year-End Special with Hung Lee
Featured Partners
Related Videos
Turbocharged: Writing High-Performance C# and .NET Code
Steve Gordon
Tips, tricks and quirks in .NET
Paweł Łukaszuk
Concurrency in Python
Fabian Schindler
The Eventloop in JavaScript - How does it work?
Christian Woerz
Concurrency with Go
Frank Müller
WebAssembly: Disassembled
Stefan Schöberl
Multithreading in Javascript: A guide to Web Workers
Dani Coll
Coroutine explained yet again 60 years later
Mikhail Maslo
Related Articles
View all articles
.gif?w=240&auto=compress,format)


From learning to earning
Jobs that call for the skills explored in this talk.



knowmad Mood
Gijón, Spain
Remote
GIT
.NET
.NET Core

Cognizant
Zürich, Switzerland
Senior
JIRA
Scrum
Jenkins
.NET Core
Kubernetes
+1

Client Server
Newcastle upon Tyne, United Kingdom
£100-130K
Senior
Python
.NET Core

Cibernos
Municipality of Madrid, Spain
Remote
Intermediate
API
GIT
MongoDB
Angular
+1

knowmad Mood
A Coruña, Spain
Remote
GIT
.NET
.NET Core

Glatthaar Keller GmbH & Co. KG
Bautzen, Germany
Remote
CSS
GIT
HTML
.NET
+6

knowmad Mood
Badajoz, Spain
Remote
GIT
.NET
.NET Core