Wielowątkowość i async
Siedem lekcji od wątku i puli wątków do maszyny stanów, którą kompilator buduje za każdym await. Na końcu katalog zakleszczeń i wycieków oraz sposoby, żeby ich nie napisać.
- Wielowątkowość i programowanie równoległe w C# - Thread, ThreadPool, TPL, Parallel
Trzy poziomy abstrakcji wielowątkowej w C# - klasa Thread, ThreadPool, Task Parallel Library z Parallel.For/ForEach i PLINQ. Synchronizacja (lock, Interlocked), pułapki race condition i deadlock oraz kiedy paralelizacja szkodzi bardziej niż pomaga. Dziesiąta część kursu C#.
- Synchronizacja wątków w C# - lock, Monitor, SemaphoreSlim, ReaderWriterLockSlim
Race condition, sekcja krytyczna i sposoby ich obrony - lock z konwencjami Microsoftu, Monitor.TryEnter z timeoutem, SemaphoreSlim dla N wątków i kodu asynchronicznego, ReaderWriterLockSlim dla wzorca read-heavy. Jedenasta część kursu C#.
- Async/await w C# - Task, TAP, sync over async i Task.WhenAll
Asynchroniczne programowanie w C# - słowa kluczowe async i await, model TAP, typ Task i Task<T>, antywzorzec sync over async (.Result/.Wait), Task.WhenAll dla równoległej kompozycji, wyjątki w async i niebezpieczeństwo async void. Dwunasta część kursu C#.
- Maszyna stanów async w C# - jak kompilator zmienia await na IAsyncStateMachine
Co kompilator Roslyn robi z metodami async pod spodem - generowanie struktury implementującej IAsyncStateMachine, pola na zmienne lokalne, MoveNext jako serce logiki, AsyncTaskMethodBuilder kontrolujący Task. Praktyczne konsekwencje dla wydajności i debugowania. Trzynasta część kursu C#.
- Task kontra ValueTask w C# - kiedy struct zamiast referencji oszczędza GC
Optymalizacja asynchroniczności dla hot path - ValueTask jako struct unika alokacji Task na stercie, gdy operacja kończy się synchronicznie. Cztery żelazne zasady bezpieczeństwa, trade-offy, kiedy używać a kiedy stać przy zwykłym Task. Czternasta część kursu C#.
- Zaawansowany async w C# - ConfigureAwait, CancellationToken, IAsyncEnumerable
Trzy mechanizmy programisty Senior - ConfigureAwait(false) eliminujący niepotrzebne wracanie do kontekstu synchronizacji, CancellationToken jako kooperatywne anulowanie, IAsyncEnumerable jako strumień asynchroniczny z await foreach. Piętnasta część kursu C#.
- Deadlocki i wycieki pamięci w async C# - sync-over-async, fire-and-forget, CancellationToken.Register
Trzy najgroźniejsze pułapki async w produkcji - klasyczny deadlock z .Result/.Wait(), połknięte wyjątki z fire-and-forget, wycieki pamięci z CancellationToken.Register. Diagnostyka i wzorce obronne. Szesnasta i ostatnia część kursu C# o asynchroniczności.
Egzamin z całego kursu
Ten kurs nie ma jeszcze egzaminu. Lekcje mają własne quizy - przejdź je po kolei, a egzamin pojawi się tutaj, gdy powstanie.