
Async/await & Pattern
async/await, Task, ValueTask, ConfigureAwait, cancellation token, esecuzione parallela, deadlock
1Qual è il ruolo principale della parola chiave 'await' in un metodo asincrono?
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.
2Perché si dovrebbe evitare async void tranne che per i gestori di eventi?
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.
3In quale caso d'uso si dovrebbe preferire ValueTask<T> rispetto a Task<T>?
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.
Quale restrizione importante si applica a ValueTask<T> rispetto a Task<T>?
Qual è lo scopo principale di ConfigureAwait(false) in una libreria .NET?
+23 domande da colloquio
Altri argomenti di colloquio .NET
Fondamenti di C#
LINQ & Delegates
Fondamenti del linguaggio C#
Fondamenti di ASP.NET Core
Ciclo di vita delle richieste in ASP.NET Core
Configuration & Settings
Ciclo di vita dell'applicazione
Dependency Injection
Entity Framework Core
Minimal APIs
Sviluppo di Web API
Async in ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Serializzazione JSON
Entity Framework Core avanzato
Funzionalità avanzate di C#
Clean Architecture
Logging, Monitoring & Observability
Test unitari & xUnit
Test di integrazione
Docker & Containerization
Gestione dei pacchetti NuGet
Memory Management & GC
Programmazione reattiva
.NET Design Patterns
Ottimizzazione delle prestazioni
Sicurezza e Best Practices
SignalR e tempo reale
Architettura a Microservizi
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