かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

C#:ネット上で一番簡単な、async/await を使用した非同期処理の説明とサンプル

非同期処理にて使用する async/await の超簡単な説明

  • 非同期メソッドには async キーワードを付ける。
  • async void の場合、呼び出し元に awaitは不要
  • async Task の場合、呼び出し元に awaitを記述する。
  • async Task<T> は T の型が返る。(例:Task<int> は intが返る)
  • Taskで取得した値を取り出すには、awaitを使用する。
  • 非同期メソッドの末尾は「Async」とする(慣習)

 
 
以下、ボタンを押したら google.co.jp の内容を取得するプログラムです。
フォーム側は WPFWindows Forms あたりで適当に用意して下さい。

サンプルコード

private void Button01_Click(object sender, RoutedEventArgs e)
{
    //async void の場合、呼び出し元に awaitは不要
    Button01_ClickContentAsync(); 
}
//非同期メソッドには async キーワードを付ける。
private async void Button01_ClickContentAsync() 
{
    string targetURL = "http://www.google.co.jp/";

    //async Task の場合、呼び出し元に awaitを記述する。
    await HttpGetRequestAsync(targetURL); 
}

private async Task HttpGetRequestAsync(string targetURL)
{
    using (var _httpClient = new HttpClient())
    {
        //Task<string> は stringが返る
        Task<string> response = _httpClient.GetStringAsync(targetURL); 
        //Taskで取得した値を取り出すには、awaitを使用する。
        string contents = await response; 

        Console.WriteLine(contents);
    }
}

 
初めのうちは、「async」って何?(Microsoft Docsを読む)、「await」って何?(Microsoft Docsを読む)、「Task」って(略)
・・・と、構文1つ1つを調べながら進めていくより、『非同期処理にて使用する構文』と、ひとまとめにして読み進める方が、理解しやすいんじゃないかと思います。  
 
 
非同期処理について調べていると、ディープな世界に踏み込んでいったり、過去の歴史まで遡りながら解説しているサイトが多く、
「理論は後でちゃんと学ぶから、まず、どんなコード書けばいいの?」という人向けの記事が少ないなー、と思ったんで、エントリにしてみた。