Session

A deep-dive into asynchronous programming in .NET

Async and await make asynchronous programming feel approachable — but underneath lies a web of subtleties that catch even seasoned .NET developers off guard. This talk goes well beyond the basics: we'll start with tasks, I/O vs CPU-bound work, and common pitfalls like deadlocks and misused .Result calls, then work our way through exception handling, cancellation, and synchronization primitives. Finally, we'll dig into the advanced layer — ValueTask, IAsyncEnumerable, ConfigureAwait, AsyncLocal, channels, and concurrency limiters — giving you a complete picture of the modern async stack.

Basics
• Tasks and what they do
• I/O bound vs CPU bound (via Task.Run)
• Long-running tasks
• What about Threads?
• WhenAll/WhenAny
• Result/Wait and deadlocks
• Async suffix
• Thread.Sleep -> Task.Delay
• WaitAsync
• Parallel.ForEachAsync
• WhenEach (.NET 9)

Exception handling, synchronization, cancellation
• Old-style vs new style (OS-provided vs .NET provided)
• TaskCompletionSource
• CancelationTokenSource, OperationCanceledException and ThrowIfCancellationRequested
• AggregateException
• SemaphoreSlim
• Don't use "lock", Monitor, Mutex, etc

Advanced
• Exceptions and how they are captured in a Task
• AsyncLocal
• ValueTask
• IAsyncDisposable
• ConfigureAwait
• GetAwaiter
• IAsyncEnumerable
• Channel
• ConcurrencyLimiter

Dennis Doomen

Hands-on architect in the .NET space with 29 years of experience on an everlasting quest for knowledge to build the right software the right way at the right time

The Hague, The Netherlands

Actions

Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.

Jump to top