Почему Task.Result/.Wait() могут «вешать» UI/ASP.NET classic?
👾 — Потому что Task требует STA-поток
👍 — Из-за захвата SynchronizationContext: продолжение ждёт UI-поток, который блокирует синхронное ожидание
🥰 — Потому что GC останавливает мир на ожидании
⚡️ — Потому что Result всегда делает бесконечный spinwait
Библиотека задач по C#
👾 — Потому что Task требует STA-поток
👍 — Из-за захвата SynchronizationContext: продолжение ждёт UI-поток, который блокирует синхронное ожидание
🥰 — Потому что GC останавливает мир на ожидании
⚡️ — Потому что Result всегда делает бесконечный spinwait
Библиотека задач по C#
👍16
Что гарантирует readonly struct?
👾 — Что структура хранится только на стеке
👍 — Все поля readonly; методы не могут изменять this, компилятор предотвращает записи и избегает лишних defensive copies для in
🥰 — Автоматическую реализацию IEquatable<T>
⚡️ — Что экземпляры нельзя боксить
Библиотека задач по C#
👾 — Что структура хранится только на стеке
👍 — Все поля readonly; методы не могут изменять this, компилятор предотвращает записи и избегает лишних defensive copies для in
🥰 — Автоматическую реализацию IEquatable<T>
⚡️ — Что экземпляры нельзя боксить
Библиотека задач по C#
👍17
Что даёт record struct по сравнению с обычным struct?
👾 — Делает тип ссылочным
👍 — Генерирует структурное равенство, with-копирование и Deconstruct, оставаясь значимым типом
🥰 — Запрещает изменяемые поля
⚡️ — Автоматически реализует IDisposable
Библиотека задач по C#
👾 — Делает тип ссылочным
👍 — Генерирует структурное равенство, with-копирование и Deconstruct, оставаясь значимым типом
🥰 — Запрещает изменяемые поля
⚡️ — Автоматически реализует IDisposable
Библиотека задач по C#
🥰3👍1🌚1