.NET

Async/await & Pattern

async/await, Task, ValueTask, ConfigureAwait, cancellation token, esecuzione parallela, deadlock

26 domande da colloquio·
Senior
1

Qual è il ruolo principale della parola chiave 'await' in un metodo asincrono?

Risposta

La parola chiave await sospende l'esecuzione del metodo asincrono finché la Task non è completata, liberando al contempo il thread chiamante affinché possa elaborare altre attività. Questo evita il blocco del thread e migliora la scalabilità dell'applicazione. A differenza di Task.Wait() o Task.Result che bloccano il thread, await consente un uso efficiente delle risorse del thread pool.

2

Perché si dovrebbe evitare async void tranne che per i gestori di eventi?

Risposta

I metodi async void non possono essere attesi (await) e le eccezioni lanciate al loro interno non possono essere catturate dal codice chiamante, causando un crash dell'applicazione. Inoltre, è impossibile eseguire test unitari su un metodo async void perché non c'è alcuna Task da attendere. I gestori di eventi sono l'eccezione perché vengono chiamati dal framework e non possono restituire Task.

3

In quale caso d'uso si dovrebbe preferire ValueTask<T> rispetto a Task<T>?

Risposta

ValueTask è un value type che evita l'allocazione sull'heap quando il risultato è già disponibile in modo sincrono, come in una cache. Questo riduce la pressione sul garbage collector negli scenari ad alte prestazioni. Task viene sempre allocato sull'heap anche se il risultato è sincrono. Usa ValueTask solo quando i guadagni di prestazioni sono misurabili, poiché un uso scorretto può degradare le prestazioni.

4

Quale restrizione importante si applica a ValueTask<T> rispetto a Task<T>?

5

Qual è lo scopo principale di ConfigureAwait(false) in una libreria .NET?

+23 domande da colloquio

Padroneggia .NET per il tuo prossimo colloquio

Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.

Inizia gratis