"async" Function Example

A tutorial example is provided on how to write an 'async' function with Task<T> return type. An 'async' function needs an 'await' expression to trigger a child thread to split executions.

After having a good understanding on how "await" expressions work, we can take a closer look at "async" functions.

According to the C# 5 specification, an "async" function works under the following rules:

The invocation of an "async" function goes roughly like this:

Since we have existing tutorial examples on "await" expressions from previous tutorials, we can modify one of them to create an "async" function with Task<int> as the return type, AsyncFunctionTest.cs:

// AsyncFunctionTest.cs
// Copyright (c) 2015, HerongYang.com, All Rights Reserved.

using System;
using System.Net.Http;
using System.Threading.Tasks;
public class AsyncFunctionTest {
   static void Main() {
      Task<int> t = AwaitTest();
      Console.WriteLine("Let me wait for it...");
      int l = t.Result;
      Console.WriteLine("Length of response body: "+l);
   } 
   async static Task<int> AwaitTest() {
      string uri = "http://www.herongyang.com/Service/Hello_REST.php";
      HttpClient c = new HttpClient();
      Console.WriteLine("Calling GetStringAsync()...");	
      Task<string> t = c.GetStringAsync(uri);
      Console.WriteLine("Evaluating await-expression ...");	
      string s = await t;
      Console.WriteLine("Writing GET response body ...");	
      Console.WriteLine(s);
      return s.Length;
   } 
}

If you compile and run this tutorial example with .NET Framework 4.6.1 SDK, you will get:

C:\herong>%NET%\csc "/r:%REF%/System.Net.Http.dll" 
   AsyncFunctionTest.cs

C:\herong>AsyncFunctionTest
Calling GetStringAsync()...
Evaluating await-expression ...
Let me wait for it...
Writing GET response body ...
<Result>
   <Message>
      Hello from server - herongyang.com.
   </Message>
</Result>
Length of response body: 87

Wonderful! Everything went exactly as expected.

This tutorial example, AsyncFunctionTest.cs, actually creates an "async" function as a wrapper of the GetStringAsync() method from the System.Net.Http.HttpClient class.

Last update: 2015.

Table of Contents

 About This Book

 Introduction of C# (C Sharp)

 Data Type and Variables

 Logical Expressions and Conditional Statements

 Arrays and Loop Statements

 Data Type Features

 Floating-Point Data Types

 Passing Parameters to Methods

 Execution Environment Class

 Visual C# 2010 Express Edition

 Class Features

 C# Compiler and Intermediate Language

 Compiling C# Source Code Files

 MSBuild - Microsoft Build Engine

 Memory Usages of Processes

 Multithreading in C#

Async Feature from C# 5

 What Is Async Feature?

 GetStringAsync() Method in HttpClient Class

 GetStringAsync() Method Example Program

 Watching Asynchronous Operation Execution Status

 "await" Expression and Child Thread

 "await" Expression Thread Example

"async" Function Example

 System.IO.FileInfo Class

 System.Diagnostics.FileVersionInfo Class

 WPF - Windows Presentation Foundation

 Partial Classes and Partial Methods

 Outdated Tutorials

 References

 PDF Printing Version