Memory<T> jako obietnica Span<T> przeżywająca await, ReadAsync z buforem, ReadOnlyMemory<char> dla tekstu w async, IMemoryOwner i MemoryPool dla recyklingu, lifetime rules - reguły 3-8 z dokumentacji MS o czasie życia bufora. Osiemnasta część kursu C#.
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.
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#.
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#.
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#.
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#.