Come si utilizza la parola chiave await in C#?
sobes.tech AI
Risposta dell'AI
La parola chiave await viene utilizzata in C# per attendere in modo non bloccante il completamento di un'operazione asincrona.
L'uso di await è possibile solo all'interno di metodi asincroni contrassegnati dal modificatore async.
Quando l'esecuzione raggiunge l'istruzione await, il flusso di controllo ritorna al chiamante e il metodo viene "sospeso" fino a quando il task atteso non termina. Dopo che il task termina, l'esecuzione del metodo riprende dal punto in cui si era interrotta.
Questo permette di liberare il thread chiamante (ad esempio, il thread dell'interfaccia utente o il thread del server web) per eseguire altre attività, migliorando la reattività e la scalabilità dell'applicazione.
public async Task<string> GetDataAsync()
{
// Simulazione di un'operazione asincrona di lunga durata
await Task.Delay(2000);
return "Dati ricevuti";
}
public async Task ProcessDataAsync()
{
Console.WriteLine("Inizio elaborazione...");
string result = await GetDataAsync(); // Attende il completamento di GetDataAsync senza bloccare
Console.WriteLine($"Risultato: {result}");
Console.WriteLine("Elaborazione completata.");
}
La parola chiave await può essere applicata a:
- Task (Task, Task<T>, ValueTask, ValueTask<T>): scenario più comune.
- tipi awaitable: oggetti che hanno un metodo
GetAwaiter(), che restituisce un tipo con i metodiIsCompleted,GetResult()eOnCompleted()(per supportare la continuazione).
L'uso di await rende il codice asincrono più leggibile e simile al codice sincrono, eliminando la necessità di scrivere manualmente codice di continuazione o di usare callback.