
Async/await i wzorce
async/await, Task, ValueTask, ConfigureAwait, cancellation tokens, wykonywanie równoległe, deadlocki
1Jaka jest główna rola słowa kluczowego 'await' w metodzie asynchronicznej?
Jaka jest główna rola słowa kluczowego 'await' w metodzie asynchronicznej?
Odpowiedź
Słowo kluczowe await zawiesza wykonywanie metody asynchronicznej do czasu zakończenia Task, jednocześnie zwalniając wątek wywołujący, aby mógł przetwarzać inne zadania. Pozwala to uniknąć blokowania wątku i poprawia skalowalność aplikacji. W przeciwieństwie do Task.Wait() lub Task.Result, które blokują wątek, await umożliwia efektywne wykorzystanie zasobów thread pool.
2Dlaczego należy unikać async void z wyjątkiem procedur obsługi zdarzeń?
Dlaczego należy unikać async void z wyjątkiem procedur obsługi zdarzeń?
Odpowiedź
Metody async void nie mogą być oczekiwane (await), a wyjątki rzucone w środku nie mogą zostać przechwycone przez kod wywołujący, co powoduje awarię aplikacji. Ponadto testowanie jednostkowe metod async void jest niemożliwe, ponieważ nie ma żadnej Task do oczekiwania. Procedury obsługi zdarzeń są wyjątkiem, ponieważ są wywoływane przez framework i nie mogą zwracać Task.
3W którym przypadku użycia należy preferować ValueTask<T> zamiast Task<T>?
W którym przypadku użycia należy preferować ValueTask<T> zamiast Task<T>?
Odpowiedź
ValueTask to value type, który unika alokacji na stercie (heap), gdy wynik jest już dostępny synchronicznie, na przykład w cache. Zmniejsza to obciążenie garbage collectora w scenariuszach o wysokiej wydajności. Task jest zawsze alokowany na stercie, nawet jeśli wynik jest synchroniczny. Używaj ValueTask tylko wtedy, gdy zyski wydajności są mierzalne, ponieważ niepoprawne użycie może obniżyć wydajność.
Jakie ważne ograniczenie dotyczy ValueTask<T> w porównaniu z Task<T>?
Jaki jest główny cel ConfigureAwait(false) w bibliotece .NET?
+23 pytań z rozmów
Inne tematy rekrutacyjne .NET
Podstawy C#
LINQ & Delegates
Podstawy języka C#
Podstawy ASP.NET Core
Cykl życia żądania w ASP.NET Core
Configuration & Settings
Cykl życia aplikacji
Dependency Injection
Entity Framework Core
Minimal APIs
Tworzenie Web API
Async w ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Serializacja JSON
Entity Framework Core zaawansowany
Zaawansowane funkcje C#
Clean Architecture
Logging, Monitoring & Observability
Testy jednostkowe & xUnit
Testy integracyjne
Docker & Containerization
Zarządzanie pakietami NuGet
Memory Management & GC
Programowanie reaktywne
.NET Design Patterns
Optymalizacja wydajności
Bezpieczeństwo i Best Practices
SignalR i czas rzeczywisty
Architektura Mikroserwisów
Opanuj .NET na następną rozmowę
Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.
Zacznij za darmo