private async void StartButton_Click(object sender, RoutedEventArgs e)
{
// ExampleMethodAsync returns a Task<int> and has an int result.
// A value is assigned to intTask when ExampleMethodAsync reaches
// an await.
try
{
Task<int> intTask = ExampleMethodAsync();
// You can do other work here that doesn't require the result from
// ExampleMethodAsync. . . .
// You can access the int result when ExampleMethodAsync completes.
int intResult = await intTask;
// Or you can combine the previous two steps:
//int intResult = await ExampleMethodAsync();
// Process the result (intResult). . . .
}
catch (Exception)
{
// Process the exception. . . .
}
}
public async Task<int> ExampleMethodAsync()
{
var httpClient = new HttpClient();
// At the await expression, execution in this method is suspended, and
// control returns to the caller of ExampleMethodAsync.
// Variable exampleInt is assigned a value when GetStringAsync completes.
int exampleInt = (await httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;
// You can break the previous line into several steps to clarify what happens:
//Task<string> contentsTask = httpClient.GetStringAsync("http://msdn.microsoft.com");
//string contents = await contentsTask;
//int exampleInt = contents.Length;
// Continue with whatever processing is waiting for exampleInt. . . .
// After the return statement, any method that's awaiting
// ExampleMethodAsync can get the integer result.
return exampleInt;
}