﻿
{"id":12272,"date":"2019-10-26T21:12:09","date_gmt":"2019-10-26T21:12:09","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=12272"},"modified":"2019-10-26T21:12:09","modified_gmt":"2019-10-26T21:12:09","slug":"c-8-0-asenkron-foreach","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-8-0-asenkron-foreach\/","title":{"rendered":"C# 8.0 &#8211; Asenkron Foreach"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, bir \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/c-8-0-iasyncenumerablet-ve-iasyncenumeratort-arayuzleri-ile-asenkron-iterasyonel-islev-olusturma\/\" target=\"_blank\" rel=\"noopener noreferrer\">IAsyncEnumerablee&lt;T&gt; ve IAsyncEnumeratore&lt;T&gt; Aray\u00fczleri \u0130le Asenkron Iterasyonel \u0130\u015flev Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 makalemizle ili\u015fkili olan Asenkron Foreach yap\u0131lanmas\u0131 \u00fczerine konu\u015fuyor olaca\u011f\u0131z.<\/p>\n<p>C# 8.0 ile gelen IAsyncEnumerable&lt;T&gt; interfacei IEnumerable&lt;T&gt; t\u00fcr\u00fcn\u00fcn yeni bir asenkron versiyonu olarak hayat\u0131m\u0131za girmi\u015ftir. Bu tip sayesinde foreach d\u00f6ng\u00fcs\u00fcnde async keyword\u00fcn\u00fc kullanabilmekte ve asenkron i\u015flemler ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<p>Asenkron foreach kullanabilmek i\u00e7in geriye IAsyncEnumerable&lt;T&gt; tipinden de\u011fer d\u00f6nd\u00fcren bir metot \u00fczerinde \u00e7al\u0131\u015f\u0131lmas\u0131 yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static async Task Do()\r\n        {\r\n            await foreach (var item in Numbers())\r\n            {\r\n                Console.WriteLine(item);\r\n            }\r\n        }\r\n\r\n        static async IAsyncEnumerable&lt;int&gt; Numbers()\r\n        {\r\n            yield return 3;\r\n            await Task.Delay(1000);\r\n            yield return 5;\r\n            await Task.Delay(1000);\r\n            yield return 6;\r\n            await Task.Delay(1000);\r\n            yield return 7;\r\n            await Task.Delay(1000);\r\n            yield return 8;\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere ilgili tipten geriye de\u011fer d\u00f6nd\u00fcren metodumuz i\u00e7erisinde <em>yield return<\/em> ile itere edilen verilerin olmas\u0131 yeterli olacakt\u0131r.<\/p>\n<p>Fikir vermesi maksad\u0131yla Numbers metodunun i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi de \u015fekillendirebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static async Task Do()\r\n        {\r\n            await foreach (var item in Numbers())\r\n            {\r\n                Console.WriteLine(item);\r\n            }\r\n        }\r\n\r\n        static async IAsyncEnumerable&lt;int&gt; Numbers()\r\n        {\r\n            List&lt;int&gt; numbers = new List&lt;int&gt; { 3, 5, 6, 7, 8 };\r\n            foreach (var item in numbers)\r\n            {\r\n                await Task.Delay(1000);\r\n                yield return item;\r\n            }\r\n        }\r\n<\/pre>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, bir \u00f6nceki IAsyncEnumerablee&lt;T&gt; ve IAsyncEnumeratore&lt;T&gt; Aray\u00fczleri \u0130le Asenkron Iterasyonel \u0130\u015flev Olu\u015fturma ba\u015fl\u0131kl\u0131 makalemizle ili\u015fkili olan Asenkron Foreach yap\u0131lanmas\u0131 \u00fczerine konu\u015fuyor olaca\u011f\u0131z. C# 8.0 ile gelen IAsyncEnumerable&lt;T&gt; interfacei IEnumerable&lt;T&gt; t\u00fcr\u00fcn\u00fcn yeni bir&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":11028,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3033,2857],"tags":[3035,3031,3034],"class_list":["post-12272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core-3-0","category-c-8-0","tag-asenkron-foreach","tag-iasyncenumerable","tag-yield-return"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=12272"}],"version-history":[{"count":8,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12272\/revisions"}],"predecessor-version":[{"id":12284,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12272\/revisions\/12284"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/11028"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=12272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=12272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=12272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}