Task.Delay(1000); Console.WriteLine(“ciao!”); } async abilita l’uso di await e avverte il compilatore che il metodo sarà trattato in modo “speciale” await indica un punto di sospensione, qui il flusso diventa effettivamente asincrono prende un awaitable (operazione asincrona) e verifica se è già completa se è completa il flusso continua in modo sincrono altrimenti chiede all’awaitable di eseguire il resto del metodo quando avrà terminato e ritorna quando awaitable termina il resto del metodo viene eseguito nel contestocatturato
Console.WriteLine(“ciao!”); } In .NET esistono due awaitable già pronti, Task e Task<T> N.B. è il tipo che è awaitable, non il metodo che ritorna il tipo! Un metodo asincrono può ritornare Task, Task<T> oppure void N.B. un metodo asincrono attende una sola operazione alla volta e un Task è completo una sola volta! public async Task<int> DoSomethingAsync() { await Task.Delay(1000); return 6; }
context 2. se stiamo rispondendo ad una request ASP.NET, è il request context 3. altrimenti in quasi tutti gli altri casi è il thread pool context (TaskScheduler.Default) //WPF public async void DownloadButton_Click(object sender, EventArgs e) { await DownloadFileAsync(...); resultTextBox.Text = "File downloaded!"; } //ASP.NET public async void DownloadButton_Click(object sender, EventArgs e) { await DownloadFileAsync(...); Response.Write("File downloaded!"); }