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.
Per approfondire l'argomento vi rimando al sito ufficiale dell'MSDN
Nessun commento:
Posta un commento