.NET

Async/await i wzorce

async/await, Task, ValueTask, ConfigureAwait, cancellation tokens, wykonywanie równoległe, deadlocki

26 pytań z rozmów·
Senior
1

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.

2

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.

3

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ść.

4

Jakie ważne ograniczenie dotyczy ValueTask<T> w porównaniu z Task<T>?

5

Jaki jest główny cel ConfigureAwait(false) w bibliotece .NET?

+23 pytań z rozmó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