Modifier: async / await
Used to mark a method as being asynchronous and to await results from the asynchronous processing. Available from .NET 4.5 (C# 5).
Example:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows;
namespace Examples
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
/// Standard WPF initialization
/// </summary>
public MainWindow()
{
Console.WriteLine("Initializing...");
InitializeComponent();
Console.WriteLine("Finished Initializing.");
}
/// <summary>
/// Async download webpage
/// </summary>
/// <returns></returns>
async Task<int> DownloadWeb()
{
Console.WriteLine("Started Async.");
HttpClient client = new HttpClient();
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
Console.WriteLine("Starting await.");
string urlContents = await getStringTask;
Console.WriteLine("Finished await.");
return urlContents.Length;
}
/// <summary>
/// Handle a button press as an async task
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void Button_Click(object sender, RoutedEventArgs e)
{
int length = await DownloadWeb();
Console.WriteLine("Got Result: " + length);
}
}
}
XAML
<Window x:Class="Examples.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Examples"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="305,134,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>



Leave a comment