Kotlin Coroutines and ConcurrencyÂ
If you've been writing coroutine code and just "hoping" that it's right, or if you gave up and settled for other solutions... now's the time to get a full, cohesive mental model that enables you to be effective with coroutines. Once you connect all the dots, you'll be ready to build concurrent and asynchronous apps like a pro!
Learn with Ease
Grow your understanding one step at a time, with each lesson building upon earlier lessons.
Craft a Solid Mental Model
Understand how coroutines work, and use them effectively wherever you need them.
Code with Confidence
Know what your coroutines are doing, and eliminate the guesswork.
Learn Coroutines the Easy Way
Asynchronous code. Shared mutable state. Structured concurrency. Context. Scope. When learning coroutines, it can be difficult to know where to start.
Many Kotlin developers have tried piecing together information from different blog posts and articles, hoping to get the full picture, but often end up walking away more confused than ever.
It's not just you!
I had used coroutines in production for years. I'd read the documentation and other articles, watched the conference talks, and even dug into the source code. But still, I always felt it was likely I'd do something wrong with them. For a long time, I just didn't have the same confidence when writing coroutine code as I did with the rest of my code.
But then, while researching and preparing to write the coroutines chapter of my book, Kotlin: An Illustrated Guide, I couldn't put things off any longer -Â I had to wrestle with the concepts until I figured out how to present them in ways that would be fun, relatable, and accessible.
And you know what I discovered?
The reason many developers struggle with coroutines isn't because they're inherently difficult to understand. Coroutines are often just introduced in overwhelming ways, diving right into asynchronous code, or jumping into the depths of how the internals are structured.
Don't waste your time trying to piece together tidbits of information from lots of small articles about coroutines, hoping to form a full picture. It's a lot of work - trust me! That's why I've designed this course - to ease you into the concepts from beginning to end.
If you've been writing coroutine code and just "hoping" that it's right, or if you gave up and settled for other solutions... now's the time to get a full, cohesive mental model that enables you to be effective with coroutines. Once you connect all the dots, you'll be ready to build concurrent and asynchronous apps like a pro.
What's covered in this course?
The course totals over 9½ hours of content. Below is the list of units and lessons, along with the runtime in minutes for each unit.
Coroutines and Suspending Functions (35m)
âś… Intro to Coroutines and Concurrency
âś…Â Suspending Functions
âś…Â Coroutines in the Standard Library
Builders, Dispatchers, and Context (35m)
âś…Â You'll Need a Scope...
âś…Â Coroutine Builders: launch() and async()
âś…Â Threads and Dispatchers
âś…Â Coroutine Context
âś…Â Ways to Get a Scope
Shared Mutable State (33m)
âś…Â Intro to Shared Mutable State
âś…Â Avoiding Shared Mutable State
âś…Â Confinement
âś…Â Mutex Locks
âś…Â Atomics
Structured Concurrency 1 (46m)
âś…Â Structured Programming & Concurrency
âś…Â Creating Structured Concurrency
âś…Â Scopes and Suspending Functions
âś…Â Structured Concurrency in Practice
 Structured Concurrency 2 (49m)
âś…Â Cancellations
âś…Â Managing Cancellations
âś… Exceptions in Coroutines
âś…Â Supervisors
âś…Â CoroutineExceptionHandler
 Coroutine Usage Patterns (43m)
âś…Â Avoiding Unnecessary Coroutines
âś…Â Attaching a Scope to a Lifecycle
âś… Passing Scopes and Dispatchers
âś…Â Wrapping Callback-Based APIs
Flow 1: Essentials (55m)
✅ Review of Collections and Sequences
âś…Â Flows, Collectors, and Emitters
âś…Â Flow Operators
âś…Â Flow and Cancellations
âś…Â Flow and Exceptions
Flow 2: Multi-Coroutine Flows (41m)
âś…Â Intro to Multi-Coroutine Flows
âś…Â Multi-Coroutine Flow Operators
âś…Â Putting Flows Together
âś…Â Flattening Flows
Flow 3:Â Hot Flows (43m)
âś… Intro to Hot Flows
âś…Â SharedFlow
âś…Â StateFlow
âś…Â Converting Cold Flows into Hot Flows
 Channels (71m)
âś…Â Intro to Workflows
âś…Â Channel Basics
âś…Â Complex Workflows
âś…Â Produce and Select
âś…Â Actors
âś…Â Terminating Channels
âś… Channels and Flows
Testing and Debugging (86m)
âś…Basics of Testing Concurrent Code
âś…Â Controlling Time in Tests
âś…Â Testing Coroutines on External Scopes
✅ Testing Flows
âś…Â Debugging with IDs and Names
âś…Â Debugging Coroutines in the IDE
âś…Â The Coroutines Debugging Library
Coroutines in the Wild (34m)
âś… Coroutines in Spring Framework
âś… Coroutines in Ktor Server and Client
âś… Coroutines in Compose Apps
Hey, I'm Dave.
After 25 years of professional coding, I’ve learned something about teaching technical concepts: the right illustration or analogy can make all the difference.
That’s the philosophy behind everything I make. I’ve been writing about Kotlin since 2017 - back when the language was just taking off - and that experience shaped my book, Kotlin: An Illustrated Guide, a carefully crafted, visual guide where each concept builds on the last, with stories and cartoons that make the concepts stick.
Get a feel for my teaching style on my YouTube channel, and join me for The TypeAlias Show, a livestream covering the latest in Kotlin and Android.
Questions & Answers
Do I need to have a certain level of experience?
Do the videos include subtitles?
What if I can't keep up with the video lessons?
Can my company reimburse me for this course?
I want to purchase the course for my entire team! Can I get a discount?
Do you offer a money-back guarantee?
❤️ Loved by LearnersÂ
Henry
This is by far the best resource I have used to learn coroutines. I have bought and read all the books on the subject I could get my hands on. I have taken multiple courses on the topic but I have never been able to confidently use coroutines until now.
This course filled in the gaps I didn't know I had in trying to learn to use coroutines confidently. It goes beyond learning the syntax you need to explain why each of the parts are required and that makes all the difference!
Phong
The course has been amazing. I’d highly recommend it to anyone looking to dive deep into Kotlin Coroutines and learn how to use them effectively in real-world Kotlin app development.
I have already gained a huge amount of understanding, and now I feel much more confident applying Coroutines and Structured Concurrency in practice with projects I am working on, not only my tasks, but also helping to review the code of my colleagues.
Codrut
This is one of the few courses that I’ve genuinely enjoyed while gaining useful knowledge about concurrency and coroutines.
The concepts are very well-prepared, with detailed explanations of how things work under the hood rather than just showing how to use APIs or libraries. I especially appreciated the visual support and drawings for the harder parts, and the hands-on exercises that helped the concepts stick.
Gaelle
I have been using coroutines in my day to day work but this course has really helped me gain deeper knowledge of the concepts. It also gave me tips on how to test and experiment myself with coroutines and suspending functions.
The course is clear with real life example easy to follow. The exercises help you experiment with the different concepts. Whether you want to start using coroutines or are already using them in your project you will be able to follow and will learn a lot!
Michael
Really great explanations and good exercises. Just about right for me doing this course between work-time.
Paolo
Dave is a really good teacher. He's definitely well prepared. The lessons are divided into sections that aren't too long and are full of examples. I'm happy with my purchase.