C Sharp asyncとawaitの動作確認
ナビゲーションに移動
検索に移動
C# asyncとawaitの動作確認
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net.Http;
- using System.Text;
- using System.Threading.Tasks;
- namespace Concurrent
- {
- class Program
- {
- static void Main(string[] args)
- {
- var me = new Program();
- me.UnBlockingRequest();
- Console.WriteLine("***** 非同期メソッド終了 *****");
- me.BlockingRequest();
- Console.WriteLine("***** 同期メソッド終了 *****");
- }
- private void BlockingRequest()
- {
- Console.WriteLine("***** 同期メソッド開始 *****");
- using (var client = new HttpClient())
- {
- var req = new HttpRequestMessage(HttpMethod.Head, "http://typea.info/blg/glob/");
- Console.WriteLine("***** 同期メソッド リクエスト結果を待つ *****");
- // await キーワードを使用せず、Resultを使用
- HttpResponseMessage response
- = client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead).Result;
- var headerStrings = from header in response.Headers
- select $"{header.Key}:{string.Join(",",header.Value)}"
- ;
- string headerList = string.Join(Environment.NewLine, headerStrings);
- Console.WriteLine("***** 同期メソッド結果出力 *****");
- Console.WriteLine(headerList);
- }
- }
- private async void UnBlockingRequest()
- {
- Console.WriteLine("***** 非同期メソッド開始 *****");
- using (var client = new HttpClient())
- {
- var req = new HttpRequestMessage(HttpMethod.Head, "http://typea.info/blg/glob/");
- Console.WriteLine("***** 非同期メソッド リクエスト結果を待たずにメソッド終了し、結果が返ったら以降の処理を実行 *****");
- // await キーワードを使用
- HttpResponseMessage response
- = await client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead);
- var headerStrings = from header in response.Headers
- select $"{header.Key}:{string.Join(",", header.Value)}"
- ;
- string headerList = string.Join(Environment.NewLine, headerStrings);
- Console.WriteLine("***** 非同期メソッド結果出力 *****");
- Console.WriteLine(headerList);
- }
- }
- }
- }
結果
- 結果出力の順序が異なる
例1
- ***** 非同期メソッド開始 *****
- ***** 非同期メソッド リクエスト結果を待たずにメソッド終了し、結果が返ったら以降の処理を実行 *****
- ***** 非同期メソッド終了 *****
- ***** 同期メソッド開始 *****
- ***** 同期メソッド リクエスト結果を待つ *****
- ***** 非同期メソッド結果出力 *****
- Connection:close
- Accept-Ranges:bytes
- Date:Sun, 24 Dec 2017 00:14:21 GMT
- ETag:"5b98aca-103b6-723edcc0"
- Server:Apache/2.2.3,(CentOS)
- ***** 同期メソッド結果出力 *****
- Connection:close
- Accept-Ranges:bytes
- Date:Sun, 24 Dec 2017 00:14:21 GMT
- ETag:"5b98aca-103b6-723edcc0"
- Server:Apache/2.2.3,(CentOS)
- ***** 同期メソッド終了 *****
例2
- ***** 非同期メソッド開始 *****
- ***** 非同期メソッド リクエスト結果を待たずにメソッド終了し、結果が返ったら以降の処理を実行 *****
- ***** 非同期メソッド終了 *****
- ***** 同期メソッド開始 *****
- ***** 同期メソッド リクエスト結果を待つ *****
- ***** 同期メソッド結果出力 *****
- Connection:close
- Accept-Ranges:bytes
- Date:Sun, 24 Dec 2017 00:15:06 GMT
- ETag:"5b98aca-103b6-723edcc0"
- Server:Apache/2.2.3,(CentOS)
- ***** 非同期メソッド結果出力 *****
- Connection:close
- Accept-Ranges:bytes
- Date:Sun, 24 Dec 2017 00:15:06 GMT
- ETag:"5b98aca-103b6-723edcc0"
- Server:Apache/2.2.3,(CentOS)
- ***** 同期メソッド終了 *****
© 2006 矢木浩人