| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「C Sharp asyncとawaitの動作確認」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:
==C# asyncとawaitの動作確認==
+
==[[C# asyncとawaitの動作確認]]==
[[C#]][[C# サンプルコード]]
+
[[C Sharp]] | [[C Sharp サンプルコード]] |
  
 
  using System;
 
  using System;
16行目: 16行目:
 
         {
 
         {
 
             var me = new Program();
 
             var me = new Program();
             me.UnBlockingRequest();
+
             me.UnBlocking[[R]]equest();
 
             Console.WriteLine("***** 非同期メソッド終了 *****");
 
             Console.WriteLine("***** 非同期メソッド終了 *****");
 
   
 
   
             me.BlockingRequest();
+
             me.Blocking[[R]]equest();
 
             Console.WriteLine("***** 同期メソッド終了 *****");
 
             Console.WriteLine("***** 同期メソッド終了 *****");
 
         }
 
         }
 
   
 
   
 
          
 
          
         private void BlockingRequest()
+
         private void Blocking[[R]]equest()
 
         {
 
         {
 
             Console.WriteLine("***** 同期メソッド開始 *****");
 
             Console.WriteLine("***** 同期メソッド開始 *****");
 
             using (var client = new HttpClient())
 
             using (var client = new HttpClient())
 
             {
 
             {
                 var req = new HttpRequestMessage(HttpMethod.Head, "http://typea.info/blg/glob/");
+
                 var req = new Http[[R]]equestMessage(HttpMethod.Head, "http://typea.info/blg/glob/");
 
   
 
   
 
                 Console.WriteLine("***** 同期メソッド リクエスト結果を待つ *****");
 
                 Console.WriteLine("***** 同期メソッド リクエスト結果を待つ *****");
                 // await キーワードを使用せず、Resultを使用
+
                 // await キーワードを使用せず、[[R]]esultを使用
                 HttpResponseMessage response  
+
                 Http[[R]]esponseMessage response  
                     = client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead).Result;
+
                     = client.SendAsync(req, HttpCompletionOption.Response[[Header]]sRead).Result;
 
   
 
   
                 var headerStrings = from header in response.Headers
+
                 var headerStrings = from header in response.[[Header]]s
 
                                     select $"{header.Key}:{string.Join(",",header.Value)}"
 
                                     select $"{header.Key}:{string.Join(",",header.Value)}"
 
                                     ;
 
                                     ;
                 string headerList = string.Join(Environment.NewLine, headerStrings);
+
                 string headerList = string.Join(En[[vi]]ronment.NewLine, headerStrings);
 
   
 
   
 
   
 
   
47行目: 47行目:
 
         }
 
         }
 
   
 
   
         private async void UnBlockingRequest()
+
         private async void UnBlocking[[R]]equest()
 
         {
 
         {
 
             Console.WriteLine("***** 非同期メソッド開始 *****");
 
             Console.WriteLine("***** 非同期メソッド開始 *****");
 
             using (var client = new HttpClient())
 
             using (var client = new HttpClient())
 
             {
 
             {
                 var req = new HttpRequestMessage(HttpMethod.Head, "http://typea.info/blg/glob/");
+
                 var req = new Http[[R]]equestMessage(HttpMethod.Head, "http://typea.info/blg/glob/");
 
   
 
   
 
                 Console.WriteLine("***** 非同期メソッド リクエスト結果を待たずにメソッド終了し、結果が返ったら以降の処理を実行 *****");
 
                 Console.WriteLine("***** 非同期メソッド リクエスト結果を待たずにメソッド終了し、結果が返ったら以降の処理を実行 *****");
 
                 // await キーワードを使用
 
                 // await キーワードを使用
                 HttpResponseMessage response
+
                 Http[[R]]esponseMessage response
                     = await client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead);
+
                     = await client.SendAsync(req, HttpCompletionOption.Response[[Header]]sRead);
 
   
 
   
                 var headerStrings = from header in response.Headers
+
                 var headerStrings = from header in response.[[Header]]s
 
                                     select $"{header.Key}:{string.Join(",", header.Value)}"
 
                                     select $"{header.Key}:{string.Join(",", header.Value)}"
 
                                     ;
 
                                     ;
                 string headerList = string.Join(Environment.NewLine, headerStrings);
+
                 string headerList = string.Join(En[[vi]]ronment.NewLine, headerStrings);
 
   
 
   
 
   
 
   
82行目: 82行目:
 
  ***** 非同期メソッド結果出力 *****
 
  ***** 非同期メソッド結果出力 *****
 
  Connection:close
 
  Connection:close
  Accept-Ranges:bytes
+
  Accept-[[R]]anges:bytes
 
  Date:Sun, 24 Dec 2017 00:14:21 GMT
 
  Date:Sun, 24 Dec 2017 00:14:21 GMT
 
  ETag:"5b98aca-103b6-723edcc0"
 
  ETag:"5b98aca-103b6-723edcc0"
  Server:Apache/2.2.3,(CentOS)
+
  Server:[[Apache]]/2.2.3,(CentOS)
 
  ***** 同期メソッド結果出力 *****
 
  ***** 同期メソッド結果出力 *****
 
  Connection:close
 
  Connection:close
  Accept-Ranges:bytes
+
  Accept-[[R]]anges:bytes
 
  Date:Sun, 24 Dec 2017 00:14:21 GMT
 
  Date:Sun, 24 Dec 2017 00:14:21 GMT
 
  ETag:"5b98aca-103b6-723edcc0"
 
  ETag:"5b98aca-103b6-723edcc0"
  Server:Apache/2.2.3,(CentOS)
+
  Server:[[Apache]]/2.2.3,(CentOS)
 
  ***** 同期メソッド終了 *****
 
  ***** 同期メソッド終了 *****
 
=====例2=====
 
=====例2=====
101行目: 101行目:
 
  ***** 同期メソッド結果出力 *****
 
  ***** 同期メソッド結果出力 *****
 
  Connection:close
 
  Connection:close
  Accept-Ranges:bytes
+
  Accept-[[R]]anges:bytes
 
  Date:Sun, 24 Dec 2017 00:15:06 GMT
 
  Date:Sun, 24 Dec 2017 00:15:06 GMT
 
  ETag:"5b98aca-103b6-723edcc0"
 
  ETag:"5b98aca-103b6-723edcc0"
  Server:Apache/2.2.3,(CentOS)
+
  Server:[[Apache]]/2.2.3,(CentOS)
 
  ***** 非同期メソッド結果出力 *****
 
  ***** 非同期メソッド結果出力 *****
 
  Connection:close
 
  Connection:close
  Accept-Ranges:bytes
+
  Accept-[[R]]anges:bytes
 
  Date:Sun, 24 Dec 2017 00:15:06 GMT
 
  Date:Sun, 24 Dec 2017 00:15:06 GMT
 
  ETag:"5b98aca-103b6-723edcc0"
 
  ETag:"5b98aca-103b6-723edcc0"
  Server:Apache/2.2.3,(CentOS)
+
  Server:[[Apache]]/2.2.3,(CentOS)
 
  ***** 同期メソッド終了 *****
 
  ***** 同期メソッド終了 *****

2020年2月16日 (日) 04:22時点における最新版

C# asyncとawaitの動作確認

C Sharp | C Sharp サンプルコード |

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)
***** 同期メソッド終了 *****