{"id":305,"date":"2017-01-04T12:53:56","date_gmt":"2017-01-04T03:53:56","guid":{"rendered":"http:\/\/marius.main.jp\/software\/blog\/?p=305"},"modified":"2017-06-09T22:00:14","modified_gmt":"2017-06-09T13:00:14","slug":"asyncawait%e3%81%ab%e3%82%88%e3%82%8b%e3%83%9e%e3%83%ab%e3%83%81%e3%82%b9%e3%83%ac%e3%83%83%e3%83%89%e5%87%a6%e7%90%86","status":"publish","type":"post","link":"https:\/\/todosoft.net\/blog\/?p=305","title":{"rendered":"async\/await\u306b\u3088\u308b\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406"},"content":{"rendered":"<p>\u8fd4\u308a\u5024\u306e\u306a\u3044\u30e1\u30bd\u30c3\u30c9\u306e\u5834\u5408<\/p>\n<pre class=\"lang:c# decode:true\">        private async void btnStart_Click(object sender, EventArgs e)\r\n        {\r\n            Console.WriteLine(\"Start:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n\r\n            await Count();\r\n\r\n            Console.WriteLine(\"Finish:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n        }\r\n\r\n        private async Task Count()\r\n        {\r\n            int intValue = 1;\r\n\r\n            await Task.Run(() =&gt;\r\n            {\r\n                for(int intCount = 0; intCount &lt; 15; intCount++)\r\n                {\r\n                    intValue *= 2;\r\n                    Console.WriteLine(intValue);\r\n\r\n                    System.Threading.Thread.Sleep(100);\r\n                }\r\n            });\r\n        }<\/pre>\n<p>&nbsp;<\/p>\n<p>\u5225\u30b9\u30ec\u30c3\u30c9\u304b\u3089\u30ad\u30e3\u30f3\u30bb\u30eb\u51e6\u7406\u3092\u884c\u3046\u5834\u5408\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308b\u3002<\/p>\n<pre class=\"lang:c# decode:true\">        \/\/ \u30c8\u30fc\u30af\u30f3\r\n        private CancellationTokenSource objToken = null;\r\n\r\n        private async void btnStart_Click(object sender, EventArgs e)\r\n        {\r\n            Console.WriteLine(\"Start:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n\r\n            await Count();\r\n\r\n            Console.WriteLine(\"Finish:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n        }\r\n\r\n        private async Task Count()\r\n        {\r\n            int intValue = 1;\r\n\r\n            objToken = new CancellationTokenSource();\r\n\r\n            await Task.Run(() =&gt;\r\n            {\r\n                for(int intCount = 0; intCount &lt; 15; intCount++)\r\n                {\r\n                    \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u30d5\u30e9\u30b0\u304c\u7acb\u3063\u3066\u3044\u305f\u3089\u51e6\u7406\u3092\u629c\u3051\u308b\r\n                    if(objToken.IsCancellationRequested == true)\r\n                    {\r\n                        return;\r\n                    }\r\n\r\n                    intValue *= 2;\r\n                    Console.WriteLine(intValue);\r\n\r\n                    System.Threading.Thread.Sleep(100);\r\n                }\r\n            }, objToken.Token);\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u51e6\u7406\r\n        \/\/\/ &lt;\/summary&gt;\r\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\r\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\r\n        private void btnCancel_Click(object sender, EventArgs e)\r\n        {\r\n            if(objToken != null)\r\n            {\r\n                objToken.Cancel();\r\n            }\r\n        }<\/pre>\n<p>\u307e\u305f\u3001IsCancellationRequested \u3067\u306f\u306a\u304f\u00a0ThrowIfCancellationRequested \u3092\u7528\u3044\u308b\u3053\u3068\u3067\u3001<br \/>\n\u4f8b\u5916\u3068\u3057\u3066\u51e6\u7406\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"lang:c# decode:true\">        \/\/ \u30c8\u30fc\u30af\u30f3\r\n        private CancellationTokenSource objToken = null;\r\n\r\n        private async void btnStart_Click(object sender, EventArgs e)\r\n        {\r\n            Console.WriteLine(\"Start:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n\r\n            try\r\n            {\r\n                await Count();\r\n                Console.WriteLine(\"Finish:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n            }\r\n            catch (OperationCanceledException exCanceled)\r\n            {\r\n                \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u6642\r\n                Console.WriteLine(\"Canceled:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n            }\r\n        }\r\n\r\n        private async Task Count()\r\n        {\r\n            try\r\n            {\r\n                int intValue = 1;\r\n\r\n                objToken = new CancellationTokenSource();\r\n\r\n                await Task.Run(() =&gt;\r\n                {\r\n                    try\r\n                    {\r\n                        for (int intCount = 0; intCount &lt; 15; intCount++)\r\n                        {\r\n                            \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u30d5\u30e9\u30b0\u304c\u7acb\u3063\u3066\u3044\u305f\u3089OperationCanceledException\u3092\u767a\u751f\u3055\u305b\u308b\r\n                            objToken.Token.ThrowIfCancellationRequested();\r\n\r\n                            intValue *= 2;\r\n                            Console.WriteLine(intValue);\r\n\r\n                            System.Threading.Thread.Sleep(100);\r\n                        }\r\n                    }\r\n                    catch (OperationCanceledException exCanceled)\r\n                    {\r\n                        \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u6642\r\n                        throw (exCanceled);\r\n                    }\r\n                }, objToken.Token);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                throw (ex);\r\n            }\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u51e6\u7406\r\n        \/\/\/ &lt;\/summary&gt;\r\n        \/\/\/ &lt;param name=\"sender\"&gt;&lt;\/param&gt;\r\n        \/\/\/ &lt;param name=\"e\"&gt;&lt;\/param&gt;\r\n        private void btnCancel_Click(object sender, EventArgs e)\r\n        {\r\n            if (objToken != null)\r\n            {\r\n                objToken.Cancel();\r\n            }\r\n        }<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u8fd4\u308a\u5024\u306e\u3042\u308b\u30e1\u30bd\u30c3\u30c9\u306e\u5834\u5408<\/p>\n<pre class=\"lang:c# decode:true\">        private async void btnStart_Click(object sender, EventArgs e)\r\n        {\r\n            Console.WriteLine(\"Start:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n\r\n            int intResult = await Count();\r\n\r\n            Console.WriteLine(\"Total:\" + intResult);\r\n\r\n            Console.WriteLine(\"Finish:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"));\r\n        }\r\n\r\n        private async Task&lt;int&gt; Count()\r\n        {\r\n            int intValue = 1;\r\n            \r\n            int intResult = await Task.Run(() =&gt;\r\n            {\r\n                int intSum = 0;\r\n\r\n                for(int intCount = 0; intCount &lt; 15; intCount++)\r\n                {\r\n                    intValue *= 2;\r\n                    Console.WriteLine(intValue);\r\n\r\n                    intSum += intValue;\r\n\r\n                    System.Threading.Thread.Sleep(100);\r\n                }\r\n\r\n                return intSum;\r\n            });\r\n\r\n            return intResult;\r\n        }<\/pre>\n<p>&nbsp;<\/p>\n<p>\u307e\u305f\u3001VB.NET\u306e\u5834\u5408\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308b\uff08\u8fd4\u308a\u5024\u306e\u306a\u3044\u30e1\u30bd\u30c3\u30c9\uff09<\/p>\n<pre class=\"lang:vbnet decode:true \">    Private Async Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click\r\n        Debug.Print(\"Start:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"))\r\n\r\n        Await Count()\r\n\r\n        Debug.Print(\"Finish:\" + DateTime.Now.ToString(\"HH:mm:ss.ff\"))\r\n    End Sub\r\n\r\n    Private Async Function Count() As Task\r\n        Dim intValue As Integer = 1\r\n\r\n        Await Task.Run(Sub()\r\n                           For intCount = 0 To 14\r\n                               intValue *= 2\r\n                               Debug.Print(intValue)\r\n\r\n                               System.Threading.Thread.Sleep(100)\r\n                           Next\r\n                       End Sub)\r\n    End Function<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd4\u308a\u5024\u306e\u306a\u3044\u30e1\u30bd\u30c3\u30c9\u306e\u5834\u5408 private async void btnStart_Click(object sender, EventArgs e) { Console.WriteLine(&#8220;Start:&#8221; + Dat [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,21,15],"tags":[],"class_list":["post-305","post","type-post","status-publish","format-standard","hentry","category-c","category-vb-net","category-15"],"_links":{"self":[{"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=305"}],"version-history":[{"count":5,"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/305\/revisions"}],"predecessor-version":[{"id":376,"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/305\/revisions\/376"}],"wp:attachment":[{"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/todosoft.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}