- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!C# asyncとawaitの動作確認
[C#][C#サンプルコード]
[C#][C# サンプルコード]
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)
***** 同期メソッド終了 *****