
Async/await і патерни
async/await, Task, ValueTask, ConfigureAwait, cancellation tokens, паралельне виконання, deadlocks
1Яка основна роль ключового слова 'await' в асинхронному методі?
Яка основна роль ключового слова 'await' в асинхронному методі?
Відповідь
Ключове слово await призупиняє виконання асинхронного методу до завершення Task, водночас звільняючи потік, що викликав, для обробки інших завдань. Це дозволяє уникнути блокування потоку та покращує масштабованість застосунку. На відміну від Task.Wait() або Task.Result, які блокують потік, await забезпечує ефективне використання ресурсів thread pool.
2Чому слід уникати async void, окрім обробників подій?
Чому слід уникати async void, окрім обробників подій?
Відповідь
Методи async void не можна очікувати (await), а винятки, кинуті всередині, не можуть бути перехоплені кодом, що викликав, що призводить до збою застосунку. Крім того, неможливо провести модульне тестування методу async void, оскільки немає Task для очікування. Обробники подій є винятком, оскільки вони викликаються фреймворком і не можуть повертати Task.
3У якому випадку слід надавати перевагу ValueTask<T> над Task<T>?
У якому випадку слід надавати перевагу ValueTask<T> над Task<T>?
Відповідь
ValueTask — це value type, який уникає виділення в heap, коли результат уже доступний синхронно, наприклад у кеші. Це зменшує навантаження на garbage collector у високопродуктивних сценаріях. Task завжди виділяється в heap, навіть якщо результат синхронний. Використовуйте ValueTask лише тоді, коли приріст продуктивності вимірюваний, оскільки неправильне використання може погіршити продуктивність.
Яке важливе обмеження застосовується до ValueTask<T> порівняно з Task<T>?
Яка основна мета ConfigureAwait(false) у бібліотеці .NET?
+23 питань зі співбесід
Інші теми співбесід .NET
Основи C#
LINQ & Delegates
Основи мови C#
Основи ASP.NET Core
Життєвий цикл запиту в ASP.NET Core
Configuration & Settings
Життєвий цикл застосунку
Dependency Injection
Entity Framework Core
Minimal APIs
Розробка Web API
Async в ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Серіалізація JSON
Entity Framework Core просунутий
Розширені можливості C#
Clean Architecture
Logging, Monitoring & Observability
Модульне тестування та xUnit
Інтеграційні тести
Docker & Containerization
Керування пакетами NuGet
Memory Management & GC
Реактивне програмування
.NET Design Patterns
Оптимізація продуктивності
Безпека та Best Practices
SignalR і реальний час
Архітектура мікросервісів
Опануй .NET для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно