Piccolo esempio sulla programmazione asincrona con le nuove parole chiave del .Net Framework 4.5:
async ed
await.
C#
public partial class MainWindow : Window
{
private int Compute()
{
int somma = 0;
for (int i = 0; i < 10000; i++)
{
somma += i;
Console.WriteLine(i);
}
return somma;
}
private Task<int> ComputeAsync()
{
return Task.Run(() => Compute());
}
public MainWindow()
{
InitializeComponent();
}
private void btnCompute_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("Elaborazione in corso...");
int somma = Compute();
Console.WriteLine("Elaborazione terminata: " + somma);
}
private async void btnComputeAsync_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("Elaborazione async in corso...");
int somma = await ComputeAsync();
Console.WriteLine("Elaborazione async terminata: " + somma);
}
}
|
XAML
<Window x:Class="TestWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Async/Await C# 4.5" Height="184.831" Width="346.723">
<Grid>
<Button Content="Compute" HorizontalAlignment="Left" Margin="38,53,0,0" VerticalAlignment="Top" Width="97" Name="btnCompute" Click="btnCompute_Click"/>
<Button Content="Compute async" HorizontalAlignment="Left" Margin="171,53,0,0" VerticalAlignment="Top" Width="97" Name="btnComputeAsync" Click="btnComputeAsync_Click"/>
</Grid>
</Window>
|
Nell'esempio abbiamo i due metodi:
- Compute(): metodo sincrono
- ComputeAsync(): metodo asincrono (per convezione un metodo asincrono termina col suffisso Async), che restituisce un tipo Task<TResult> (Task<int> nel nostro caso). Se il metodo asincrono non deve ritornare nessun tipo basta mettere solo Task.
Il metodo che richiama
ComputeAsync() è contrassegnato dalla parola chiave
async ed attende il suo terminamento mediante
await.
Per approfondire l'argomento vi rimando al sito ufficiale dell'
MSDN