非同期処理にて使用する async/await の超簡単な説明
- 非同期メソッドには async キーワードを付ける。
- 呼び出し先が async void の場合、呼び出し元に awaitは不要
- 呼び出し先が async Task の場合、呼び出し元に awaitを記述する。
- Task<T> は T の型が返る。(例:Task<string> は string が返る)
- Task で取得した値を取り出すには、await を使用する。
- 非同期メソッドの末尾は「Async」とする(慣習)
以下、ボタンを押したら google.co.jp の内容を取得するプログラムです。
フォーム側は WPF や Windows 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つを調べながら進めていくより、『非同期処理にて使用する構文』と、ひとまとめにして読み進める方が、理解しやすいんじゃないかと思います。
非同期処理について調べていると、ディープな世界に踏み込んでいったり、過去の歴史まで遡りながら解説しているサイトが多く、
「理論は後でちゃんと学ぶから、まず、どんなコード書けばいいの?」という人向けの記事が少ないなー、と思ったんで、エントリにしてみた。