<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>İlkay İlknur</title>
    <description>Just a developer...</description>
    <link>http://www.ilkayilknur.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.6.0.0</generator>
    <language>tr-TR</language>
    <blogChannel:blogRoll>http://www.ilkayilknur.com/opml.axd</blogChannel:blogRoll>
    <dc:creator>İlkay İlknur</dc:creator>
    <dc:title>İlkay İlknur</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ilkayilknur" /><feedburner:info uri="ilkayilknur" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>Just a developer...</itunes:subtitle><item>
      <title>Nedirtv Şubat Webinerleri (Level 300 Özel) ve C# 5.0 Webinerim</title>
      <description>&lt;p style="text-align: justify;"&gt;Merhaba Arkadaşlar,&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&amp;Ccedil;ektiğim g&amp;ouml;rsel dersler ile katkıda bulunduğum nedirtv'nin bu ay d&amp;uuml;zenlemiş olduğu Level 300 webinerlerinde&lt;strong&gt; 23 Şubat'ta&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;"T&amp;uuml;m Y&amp;ouml;nleriyle C# 5.0 Asenkron Programlama"&lt;/strong&gt; isimli bir webiner d&amp;uuml;zenliyor olacağım. Webinerlerin teması level 300 olsada webiner başında en basit &amp;ouml;rnekler ile başlayıp C# 5.0'ı temelden incelemeye başlayacağız ve seviyemizi yavaş yavaş arttıracağız. Bu nedenle webinere her seviyeden developerlar katılabilir ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Şubat Webinerlerinin Programı Şu Şekilde&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Konu: Veritabanı Yerine Cache'deki Verilerle &amp;Ccedil;alışmak&lt;/p&gt;
&lt;p&gt;Zaman: 6 Şubat 2012 Pazartesi 21:00&lt;/p&gt;
&lt;p&gt;Konuşmacı: Uğur UMUTLUOĞLU&lt;/p&gt;
&lt;p&gt;Link: &lt;a href="https://www.livemeeting.com/cc/mvp/join?id=TF2CJN&amp;amp;role=attend"&gt;https://www.livemeeting.com/cc/mvp/join?id=TF2CJN&amp;amp;role=attend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Konu: Dynamics CRM'e Plugin Yazma&lt;/p&gt;
&lt;p&gt;Zaman: 13 Şubat 2012 Pazartesi 21:00&lt;/p&gt;
&lt;p&gt;Konuşmacı: Barış KANLICA&lt;/p&gt;
&lt;p&gt;Link: &lt;a href="https://www.livemeeting.com/cc/mvp/join?id=T8DDJ7&amp;amp;role=attend"&gt;https://www.livemeeting.com/cc/mvp/join?id=T8DDJ7&amp;amp;role=attend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Konu: Entity Framework - Migration&lt;/p&gt;
&lt;p&gt;Zaman: 20 Şubat 2012 Pazartesi 21:00&lt;/p&gt;
&lt;p&gt;Konuşmacı: Burak Selim ŞENYURT&lt;/p&gt;
&lt;p&gt;Link: &lt;a href="https://www.livemeeting.com/cc/mvp/join?id=P4P5JG&amp;amp;role=attend"&gt;https://www.livemeeting.com/cc/mvp/join?id=P4P5JG&amp;amp;role=attend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Konu: T&amp;uuml;m Y&amp;ouml;nleriyle C# 5.0 Asenkron Programlama&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zaman: 23 Şubat 2012 Perşembe 21:00&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Konuşmacı: İlkay İLKNUR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Link: &lt;/strong&gt;&lt;a href="https://www.livemeeting.com/cc/mvp/join?id=7H5R69&amp;amp;role=attend"&gt;&lt;strong&gt;https://www.livemeeting.com/cc/mvp/join?id=7H5R69&amp;amp;role=attend&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Konu: Masa&amp;uuml;st&amp;uuml; Uygulamasından ASP.NET Sayfalarıyla Etkileşim&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Zaman: 27 Şubat 2012 Pazartesi 21:00&lt;/p&gt;
&lt;p&gt;Konuşmacı: Fatih BOY&lt;/p&gt;
&lt;p&gt;Link: &lt;a href="https://www.livemeeting.com/cc/mvp/join?id=68WBPH&amp;amp;role=attend"&gt;https://www.livemeeting.com/cc/mvp/join?id=68WBPH&amp;amp;role=attend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;23 Şubat'ta G&amp;ouml;r&amp;uuml;şmek &amp;Uuml;zere,&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkayilknur/~4/o6Br9a7mI_c" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/ilkayilknur/~3/o6Br9a7mI_c/post.aspx</link>
      <author>ilkayilknur</author>
      <comments>http://www.ilkayilknur.com/post/2012/02/03/Nedirtv-Subat-Webinerleri-(Level-300-Ozel)-ve-C-50-Webinerim.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ilkayilknur.com/post.aspx?id=3b1a0de2-4c80-4d51-a06c-8f0f86bc5917</guid>
      <pubDate>Fri, 03 Feb 2012 09:37:00 +0200</pubDate>
      <category>C#</category>
      <category>C# 5.0</category>
      <dc:publisher>ilkayilknur</dc:publisher>
      <pingback:server>http://www.ilkayilknur.com/pingback.axd</pingback:server>
      <pingback:target>http://www.ilkayilknur.com/post.aspx?id=3b1a0de2-4c80-4d51-a06c-8f0f86bc5917</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ilkayilknur.com/trackback.axd?id=3b1a0de2-4c80-4d51-a06c-8f0f86bc5917</trackback:ping>
      <wfw:comment>http://www.ilkayilknur.com/post/2012/02/03/Nedirtv-Subat-Webinerleri-(Level-300-Ozel)-ve-C-50-Webinerim.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ilkayilknur.com/syndication.axd?post=3b1a0de2-4c80-4d51-a06c-8f0f86bc5917</wfw:commentRss>
    <feedburner:origLink>http://www.ilkayilknur.com/post.aspx?id=3b1a0de2-4c80-4d51-a06c-8f0f86bc5917</feedburner:origLink></item>
    <item>
      <title>Roslyn - Scripting API ve C# Interactive Window</title>
      <description>&lt;p&gt;Merhaba Arkadaşlar,&lt;/p&gt;
&lt;p align="justify"&gt;Bir &amp;ouml;nceki &lt;a href="http://www.ilkayilknur.com/post/2012/01/25/The-Roslyn-Project-5N1K.aspx" target="_blank"&gt;yazımızda&lt;/a&gt; sizlerle &lt;strong&gt;Compiler As a Service&lt;/strong&gt; konseptini inceleyerek Roslyn projesinin temelini oluşturan &lt;strong&gt;kavramları&lt;/strong&gt; ve &lt;strong&gt;servisleri&lt;/strong&gt; kısaca ve tamemen teorik olarak incelemiştik. Bu yazımızdan itibaren &lt;strong&gt;Roslyn&lt;/strong&gt; ile derinlere dalmaya başlayacağız ve uygulamalı olarak Roslyn&amp;rsquo;i kullanmaya başlayacağız.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;nceki yazımızda &lt;strong&gt;Compiler&lt;/strong&gt; i&amp;ccedil;erisindeki servislerin birer &lt;strong&gt;API&lt;/strong&gt; ile dışarıya a&amp;ccedil;ılmasının getireceği yeniliklerden bahsederken ilk sırada programlama dillerinin &lt;strong&gt;scripting&lt;/strong&gt; &amp;ouml;zelliği kazanmasını s&amp;ouml;ylemiştik. &lt;strong&gt;Scripting&lt;/strong&gt; &amp;ouml;zelliği ile aslında uygulamalar i&amp;ccedil;erisinde &lt;strong&gt;C# veya VB&lt;/strong&gt; kodlarının &lt;strong&gt;dinamik&lt;/strong&gt; olarak &amp;ccedil;alıştırılmasından s&amp;ouml;z etmekteyiz. &amp;Ouml;zellikle &lt;strong&gt;IronPython gibi dinamik&lt;/strong&gt; &lt;strong&gt;programlama dillerine&lt;/strong&gt; baktığımızda bu şekilde scripting &amp;ouml;zellikleri &lt;strong&gt;programlama dilinin yapısından&lt;/strong&gt; dolayı m&amp;uuml;mk&amp;uuml;n olabilmekte. Hatta &lt;strong&gt;C# 4.0&lt;/strong&gt; ile beraber gelen &lt;strong&gt;dinamik&lt;/strong&gt; programlama yenilikleri ve &lt;strong&gt;DLR (Dynamic Language Runtime)&lt;/strong&gt; ile uygulamalarımız i&amp;ccedil;erisinde şu anda Dinamik Programlama dillerinin kodlarını &amp;ccedil;alıştırabilmekteyiz.&lt;/p&gt;
&lt;p align="justify"&gt;Ancak konu &lt;strong&gt;C# ve VB&lt;/strong&gt; kodlarının dinamik olarak &amp;ccedil;alıştırılabilmesine geldiğinde &lt;strong&gt;Roslyn&lt;/strong&gt; &amp;ouml;ncesine kadar b&amp;ouml;yle bir şeyi ger&amp;ccedil;ekleştirmek bizler i&amp;ccedil;in &amp;ccedil;ok kolay değildi. Bunun i&amp;ccedil;in &lt;strong&gt;Reflection&lt;/strong&gt; ve &lt;strong&gt;CodeDom&lt;/strong&gt; tarafında bir takım derleme işlemleri yapmak gerekmekteydi.&lt;/p&gt;
&lt;p align="justify"&gt;Roslyn i&amp;ccedil;erisinde bulunan &lt;strong&gt;Scripting API&lt;/strong&gt; ile artık C# ve VB kodlarını uygulamalar i&amp;ccedil;erisinde hızlı bir şekilde işletip sonu&amp;ccedil;larını alabilmekteyiz. Şimdi ilk olarak bir &lt;strong&gt;Console&lt;/strong&gt; uygulaması yaratalım ve bu uygulama i&amp;ccedil;erisinden kodlarımızı dinamik olarak &amp;ccedil;alıştıralım.(Makale boyunca g&amp;ouml;rm&amp;uuml;ş olduğunuz kodları &amp;ccedil;alıştırabilmek i&amp;ccedil;in&amp;nbsp; &lt;strong&gt;Roslyn.Compilers ve Roslyn.Compiler.CSharp&lt;/strong&gt; dll&amp;rsquo;lerini referans olarak eklemeniz gerekmekte.)&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: 9.8pt;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt; engine = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"System.Console.WriteLine(""Hello Roslyn !!!"");"&lt;/span&gt;&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;Yukarıdaki kodu doğrudan &amp;ccedil;alıştırdığımızda &lt;strong&gt;string&lt;/strong&gt; olarak yazmış olduğumuz kodun C# compilerı tarafından işletildiğini ve &lt;strong&gt;Console&lt;/strong&gt; uygulamamızın ekranına "&lt;strong&gt;Hello Roslyn !!!&lt;/strong&gt;&amp;rdquo; yazdığını g&amp;ouml;r&amp;uuml;yoruz.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fHelloRoslyn.JPG" alt="" width="506" height="113" /&gt;&lt;/p&gt;
&lt;p&gt;Şimdi biraz daha ileri gidelim ve &lt;strong&gt;değişken&lt;/strong&gt; tanımlayıp bu tanımladığımız değişkeni &lt;strong&gt;bir alt satırda&lt;/strong&gt; yazmış olduğumuz bir başka dinamik kod i&amp;ccedil;erisinde kullanalım.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: 9.8pt;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt; engine = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"int x = 5;"&lt;/span&gt;&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"System.Console.WriteLine(x);"&lt;/span&gt;&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;Yazmış olduğumuz kodu &amp;ccedil;alıştırdığımızda bakalım ne ile karşılaşacağız :)&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fRoslynContext.JPG" alt="" width="542" height="119" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Compiler tarafından ilk olarak yaptığımız tanımlama işletildikten sonra 2. sırada yazmış olduğumuz tanımladığımız değişkenin değerini Console&amp;rsquo;a yazdıran kod işletildiği sırada yukarıdaki exception fırlatılmakta ve x değişkeninin &lt;strong&gt;context&lt;/strong&gt; i&amp;ccedil;erisinde bulunmadığı s&amp;ouml;ylenmekte. ;)&lt;/p&gt;
&lt;p align="justify"&gt;Buradan da &amp;ccedil;ıkaracağımız sonu&amp;ccedil; şu olmalı ki &lt;strong&gt;ScriptEngine&lt;/strong&gt; tipi i&amp;ccedil;erisinde bulunan &lt;strong&gt;Execute&lt;/strong&gt; metoduna &lt;strong&gt;sadece string&lt;/strong&gt; olarak verdiğimiz &lt;strong&gt;C# veya VB&lt;/strong&gt; kodları işletildikten sonra bu kodlar i&amp;ccedil;erisinde yapılmış olan t&amp;uuml;m tanımlamalar &lt;strong&gt;compiler tarafından unutulmakta&lt;/strong&gt;. Peki bu tanımlamaların unutulmaması i&amp;ccedil;in ne yapmamız gerekiyor ?&lt;/p&gt;
&lt;h2&gt;Execution Context&lt;/h2&gt;
&lt;p align="justify"&gt;C# veya VB kodlarının dinamik olarak işletilmesi sırasında daha &amp;ouml;nceden işletilen kodlarının compiler tarafından unutulmaması i&amp;ccedil;in &lt;strong&gt;kodların i&amp;ccedil;erisinde &amp;ccedil;alıştırılacağı&lt;/strong&gt; bir &lt;strong&gt;context&lt;/strong&gt; belirlememiz gerekmekte. Bunun i&amp;ccedil;in de Roslyn tarafında kodumuzun i&amp;ccedil;erisinde işletileceği bir &lt;strong&gt;Session&lt;/strong&gt; belirlememiz gerekmekte ve &lt;strong&gt;Execute&lt;/strong&gt; metoduna parametre olarak vereceğimiz kodun yaratmış olduğumuz &lt;strong&gt;Session&lt;/strong&gt; i&amp;ccedil;erisinde işletilmesi gerektiğini bildirmemiz gerekmekte.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: 9.8pt;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt; engine = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Session&lt;/span&gt;&lt;/span&gt; session = &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Session&lt;/span&gt;&lt;/span&gt;.Create();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"int x = 5;"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"System.Console.WriteLine(x);"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;Şimdi biraz daha ileriye gidelim ve session i&amp;ccedil;erisinde bir metot tanımlayalım ve daha sonra bu metodu &amp;ccedil;ağıralım.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: 9.8pt;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt; engine = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Session&lt;/span&gt;&lt;/span&gt; session = &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Session&lt;/span&gt;&lt;/span&gt;.Create();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"void Print (object x){ System.Console.WriteLine(x);}"&lt;/span&gt;&lt;/span&gt;,session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"int x = 5;"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;@"Print(x)"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;Şu ana kadar Roslyn tarafında &lt;strong&gt;dinamik kod işletme&lt;/strong&gt; ile ilgili olarak temel kısımları inceledik. Ancak incelememiş olduğumuz bir nokta kaldı. O da dinamik olarak işletmiş olduğumuz kodun aslında &amp;ccedil;alıştırılmış olduğu &lt;strong&gt;host uygulama&lt;/strong&gt; ile nasıl iletişimde olacağı.&lt;/p&gt;
&lt;h2&gt;Host Object&lt;/h2&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Host uygulama&lt;/strong&gt; ile iletişimde bulunmak i&amp;ccedil;in Roslyn tarafında &lt;strong&gt;Host Object&lt;/strong&gt; yapısını kullanmamız gerekmekte. Host Object dediğimiz yapı aslında &lt;strong&gt;herhangi&lt;/strong&gt; bir tip olabilmekte. Bu tip, tanımlamış olduğumuz &lt;strong&gt;session&lt;/strong&gt; i&amp;ccedil;erisine &lt;strong&gt;dahil edilmekte&lt;/strong&gt; ve b&amp;ouml;ylece biz de dinamik olarak işleteceğimiz kodlar tarafında bu host object i&amp;ccedil;erisinde bulunan t&amp;uuml;m &lt;strong&gt;public&lt;/strong&gt; &amp;uuml;yelere erişebilmekteyiz ve istediğimiz işlemleri ger&amp;ccedil;ekleştirebilmekteyiz. &amp;Ouml;rnek olarak host uygulama i&amp;ccedil;erisnde şu şekilde i&amp;ccedil;erisinde sayıları tutan ve bir takım işlemler ger&amp;ccedil;ekleştiren bir sınıf tanımlayalım.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;NumberList&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&amp;gt; numbers = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      v&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;oid&lt;/span&gt;&lt;/span&gt; Add(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt; i)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      {&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;           numbers.Add(i);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;/span&gt; PrintNumbers()&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      {&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;           &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;/span&gt; (&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/span&gt; i = 0; i &amp;lt; numbers.Count; i++)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;           {&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;                 &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;&lt;/span&gt;.WriteLine(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"{0}- {1}"&lt;/span&gt;&lt;/span&gt;, i + 1, numbers[i]);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;           }&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;       }&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Yukarıda tanımlamış olduğumuz tip &lt;strong&gt;host uygulama&lt;/strong&gt; olan &lt;strong&gt;Console&lt;/strong&gt; uygulamamızda yer almakta. Şimdi sıra geldi bu tipi nasıl kullanacağımıza. Eğer bir tipi host object olarak kullanmak istiyorsak &amp;ouml;ncelikli olarak bu &lt;strong&gt;tipi&lt;/strong&gt; ilgili &lt;strong&gt;Script Engine ve Session&lt;/strong&gt; tiplerine bildirmemiz gerekmekte.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="font-size: 9.8pt;"&gt;NumberList&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt; numberList = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;NumberList&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt; engine = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ScriptEngine&lt;/span&gt;&lt;/span&gt;(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;[] &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;                                  { &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;/span&gt;(&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;NumberList&lt;/span&gt;&lt;/span&gt;).Assembly.Location });&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Session&lt;/span&gt;&lt;/span&gt; session = &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Session&lt;/span&gt;&lt;/span&gt;.Create(numberList);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"Add(3);"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"Add(5)"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;engine.Execute(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"PrintNumbers()"&lt;/span&gt;&lt;/span&gt;, session);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;Uygulamamızı &amp;ccedil;alıştırdığımızda aşağıdaki gibi bir &amp;ccedil;ıktı ile karşılaşmaktayız.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fHost.JPG" alt="" width="524" height="112" /&gt;&lt;/p&gt;
&lt;h2&gt;C# Interactive Window&lt;/h2&gt;
&lt;p align="justify"&gt;&lt;strong&gt;C# ve VB&lt;/strong&gt; programlama dillerine &lt;strong&gt;Scripting&lt;/strong&gt; &amp;ouml;zelliğinin gelmesiyle beraber yapılabilecekler d&amp;uuml;ş&amp;uuml;n&amp;uuml;ld&amp;uuml;ğ&amp;uuml;nde aklımıza ilk olarak &lt;strong&gt;REPL(Read-Eval-Print-Loop) uygulamaları&lt;/strong&gt; gelmekte. Yukarıda yapmış olduğumuz &amp;ouml;rneklere baktığımızda aslında bir &lt;strong&gt;REPL&lt;/strong&gt; uygulaması yapmak i&amp;ccedil;in hemen hemen t&amp;uuml;m par&amp;ccedil;alar elimizde. Bu nedenle &lt;strong&gt;REPL&lt;/strong&gt; uygulaması kısmını tamamen size bırakıyorum ;) Ancak yine de takıldığınız noktalar olursa zaten internette Roslyn ile yapılmış pek &amp;ccedil;ok REPL uygulaması bulunmakta bunlardan yararlanabilirsiz ya da &lt;a href="http://www.ilkayilknur.com/contact.aspx" target="_blank"&gt;İletişim&lt;/a&gt; b&amp;ouml;l&amp;uuml;m&amp;uuml;nden bana ulaşabilirsiniz.&lt;/p&gt;
&lt;p align="justify"&gt;Makalemizin sonlarına gelirken makalenin bu b&amp;ouml;l&amp;uuml;m&amp;uuml;nde aslında yine Roslyn ile beraber gelen ve &lt;strong&gt;Visual Studio&lt;/strong&gt; i&amp;ccedil;erisine entegre edilen bir &lt;strong&gt;REPL&lt;/strong&gt; uygulamasından bahsediyor olacağım. Roslyn paketini bilgisayarınıza y&amp;uuml;kledikten sonra Visual Studio i&amp;ccedil;erisinde &lt;strong&gt;View =&amp;gt; Other Windows&lt;/strong&gt; yolunu izlediğinizde burada &lt;strong&gt;&amp;ldquo;C# Interactive Window&amp;rdquo;&lt;/strong&gt; se&amp;ccedil;eneğini g&amp;ouml;r&amp;uuml;yor olacaksınız. Buraya tıkladığımızda karşımıza gelen aslında &lt;strong&gt;C# kodları ile &amp;ccedil;alışan bir REPL uygulaması&lt;/strong&gt;. Bu uygulama ile hızlı bir şekilde istediğimiz kodu yazıp sonucunu g&amp;ouml;rebilmekteyiz.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fCSharpInteractive.JPG" alt="" width="531" height="83" /&gt;&lt;/p&gt;
&lt;p&gt;Şimdi isterseniz buraya bir takım kodlar yazalım ve sonu&amp;ccedil;larını inceleyelim.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fCSharpInteractive-1.JPG" alt="" width="547" height="153" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;G&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi aslında bir C# uygulaması i&amp;ccedil;erisinde yapabileceğimiz pek &amp;ccedil;ok şeyi bu Window i&amp;ccedil;erisinde yapabilmekteyiz ve sonu&amp;ccedil;larını hemen g&amp;ouml;rebilmekteyiz. Peki diğer dil &amp;ouml;zellikleri bu Window i&amp;ccedil;erisinde &lt;strong&gt;destekleniyor&lt;/strong&gt; mu diye soracak olursanız aslında compiler tarafından sağlanan bilgiler ile &amp;ccedil;alışan &lt;strong&gt;outlining, colorizer, intellisense&lt;/strong&gt; gibi &amp;ouml;zellikler de bu window i&amp;ccedil;erisinde &amp;ccedil;alışmakta. Burdan da anlıyoruz ki aslında compiler tarafından sağlanan &lt;strong&gt;farklı farklı API&amp;rsquo;lar birbirlerinden bağımsız olarak beraberce &amp;ccedil;alışabilmekteler. ;)&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;C# Interactive Window&lt;/strong&gt; i&amp;ccedil;erisinde bilmemiz gereken en &amp;ouml;nemli komutlardan biri de library referansı ekleme komutudur. &lt;strong&gt;#r &amp;ldquo;LibraryName&amp;rdquo; &lt;/strong&gt;komutu ile&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;Interactive Window i&amp;ccedil;erisinde &amp;ccedil;alıştıracağınız kodlar ile ilgili gerekli referansları ekleyebilirsiniz.&lt;/p&gt;
&lt;p align="justify"&gt;Bunun yanında &lt;strong&gt;Interactive Window&lt;/strong&gt; i&amp;ccedil;erisindeki en g&amp;uuml;zel &amp;ouml;zelliklerden biri de yazmış olduğunuz uygulama i&amp;ccedil;erisindeki kodları hızlı bir şekilde işletebilme ve sonu&amp;ccedil;larını inceleyebilme şansı vermesi. Bunun i&amp;ccedil;in &amp;ccedil;alıştırmak istediğiniz kodu se&amp;ccedil;ip &lt;strong&gt;Ctrl+Enter&lt;/strong&gt; yapmanız yeterli. Yazmış olduğunuz kod Interactive Window &lt;strong&gt;i&amp;ccedil;erisine kopyalanmakta ve işletilmekte&lt;/strong&gt;. ;)&lt;/p&gt;
&lt;p align="justify"&gt;Eğer bir takım referanslar Interactive Window i&amp;ccedil;erisinde &lt;strong&gt;tanımlı&lt;/strong&gt; değilse kopyalamış olduğunuz kod &lt;strong&gt;Interactive Window&lt;/strong&gt; i&amp;ccedil;erisinde &amp;ccedil;alıştırılamayabilir. Bu nedenle &amp;ouml;ncelikle uygulama i&amp;ccedil;erisinde referansların Interactive Window i&amp;ccedil;erisinde referans olarak eklendiğinden&lt;strong&gt; emin olmamız&lt;/strong&gt; gerekmekte. Bunun i&amp;ccedil;in de &lt;strong&gt;ilgili Project&amp;rsquo;e &lt;/strong&gt;sağ tıklayarak &lt;strong&gt;&amp;ldquo;Reset Interactive Window From Project&amp;rdquo;&lt;/strong&gt;&amp;rsquo;i se&amp;ccedil;memiz gerekmekte.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fResetInteractive.jpg" alt="" width="232" height="291" /&gt;&lt;/p&gt;
&lt;p&gt;Bu noktadan sonra ise artık yapmamız gereken ilgili kodu se&amp;ccedil;ip &lt;strong&gt;Ctrl+Enter&lt;/strong&gt; ile &lt;strong&gt;C# Interactive Window &lt;/strong&gt;i&amp;ccedil;erisinde işletmek.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f2%2fExecuteCode.jpg" alt="" width="480" height="290" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Not : Interactive Window şu anda sadece C# i&amp;ccedil;in bulunmaktadır. İlerleyen s&amp;uuml;r&amp;uuml;mlerde VB i&amp;ccedil;in de Interactive Window duyurulacaktır.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;G&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi &lt;strong&gt;Compiler As a Service (CaaS)&lt;/strong&gt; konsepti olduk&amp;ccedil;a geniş ve bir o kadar da &lt;strong&gt;eğlenceli&lt;/strong&gt; bir konu :) Bu yazımızda her ne kadar sadece&lt;strong&gt; Scripting API&amp;rsquo;yi&lt;/strong&gt; incelemiş olsakta sırf bu API&amp;rsquo;yı kullarak bile yapabileceğimiz pek &amp;ccedil;ok şey bulunmakta. Bu y&amp;uuml;zden bir &lt;strong&gt;C# veya VB developer&lt;/strong&gt; olarak herkese &lt;strong&gt;Roslyn projesini&lt;/strong&gt; takip etmesini &amp;ouml;neriyorum.&lt;/p&gt;
&lt;p align="justify"&gt;Umarım sizler i&amp;ccedil;in faydalı bir makale olmuştur.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;em&gt;&lt;strong&gt;Not: Makale i&amp;ccedil;erisindeki kodlar Roslyn CTP-1 ile yazılmış ve test edilmiştir.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkayilknur/~4/URDjO4SET1g" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/ilkayilknur/~3/URDjO4SET1g/post.aspx</link>
      <author>ilkayilknur</author>
      <comments>http://www.ilkayilknur.com/post/2012/02/01/Roslyn-Scripting-API-ve-C-Interactive-Window.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ilkayilknur.com/post.aspx?id=063713a9-0318-4b47-a982-94b69146c715</guid>
      <pubDate>Wed, 01 Feb 2012 10:51:00 +0200</pubDate>
      <category>C#</category>
      <category>Roslyn</category>
      <dc:publisher>ilkayilknur</dc:publisher>
      <pingback:server>http://www.ilkayilknur.com/pingback.axd</pingback:server>
      <pingback:target>http://www.ilkayilknur.com/post.aspx?id=063713a9-0318-4b47-a982-94b69146c715</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ilkayilknur.com/trackback.axd?id=063713a9-0318-4b47-a982-94b69146c715</trackback:ping>
      <wfw:comment>http://www.ilkayilknur.com/post/2012/02/01/Roslyn-Scripting-API-ve-C-Interactive-Window.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ilkayilknur.com/syndication.axd?post=063713a9-0318-4b47-a982-94b69146c715</wfw:commentRss>
    <feedburner:origLink>http://www.ilkayilknur.com/post.aspx?id=063713a9-0318-4b47-a982-94b69146c715</feedburner:origLink></item>
    <item>
      <title>The Roslyn Project -  5N1K (Ne,nerede,ne zaman,nasıl,neden,kim)</title>
      <description>&lt;p align="justify"&gt;Merhaba Arkadaşlar,&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;C# 4.0&lt;/strong&gt; ve &lt;strong&gt;VB.NET 10&lt;/strong&gt; programlama dili s&amp;uuml;r&amp;uuml;mleriyle beraber Microsoft tarafında bu iki programlama dilini geliştiren ekipler tek bir &amp;ccedil;atı altında toplandı. Tek bir &amp;ccedil;atı altında toplanmasının temel nedeni de aslında programlama dillerini kullanan developerların &lt;strong&gt;benzer ihtiya&amp;ccedil;larının&lt;/strong&gt; olması ve programlama dillerinin &amp;ouml;zelliklerinin birbirlerinden farklı olmasının &amp;ouml;n&amp;uuml;ne ge&amp;ccedil;ilerek&amp;nbsp; ortak temalar &amp;uuml;zerinden ilerlenmesi idi.&lt;/p&gt;
&lt;p align="justify"&gt;T&amp;uuml;m bu &amp;ccedil;alışmalar kapsamında &lt;strong&gt;C# 4.0&lt;/strong&gt; s&amp;uuml;r&amp;uuml;m&amp;uuml;n&amp;uuml;n release olmasından sonra programlama dili ekipleri 2 ayrı takıma ayrılarak geliştirmelere devam etmekteler. Bir ekip şu anda &lt;strong&gt;C# 5.0 ve VB.NET 11&lt;/strong&gt; ( programlama dilleri arasındaki farklılıkları gidermek amacıyla &lt;strong&gt;VB 11&lt;/strong&gt; ile beraber C#&amp;rsquo;ta uzun zamandır bulunmakta olan &lt;strong&gt;Iterators&lt;/strong&gt; &amp;ouml;zelliği geliyor olacak. ) dediğimiz programlama dillerinin bir sonraki versiyonu olan ve ana teması &lt;strong&gt;Asenkron Programlama&lt;/strong&gt; olarak belirlenen geliştirmelere devam ederken bir diğer ekipte daha uzun soluklu bir proje olan &lt;strong&gt;Roslyn&lt;/strong&gt; kod adlı projeye devam etmekteler.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;zellikler&lt;strong&gt; C#&lt;/strong&gt; programlama dilinin geleceği ile ilgili araştırmalar yaptıysanız &lt;strong&gt;Compiler as a Service(CaaS)&lt;/strong&gt; konseptiyle mutlaka karşılaşmışsınızdır. İşte &lt;strong&gt;Roslyn&lt;/strong&gt; projesinin temel amacı da bu. &lt;strong&gt;Compiler as service&lt;/strong&gt;, yani compiler&amp;rsquo;ın bir &lt;strong&gt;API&lt;/strong&gt; vasıtasıyla servis olarak dışarıya a&amp;ccedil;ılması.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2fcompiler.jpg" alt="" width="531" height="156" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Şu anda &lt;strong&gt;C# ve VB&lt;/strong&gt; compilerının yapısına&amp;nbsp; baktığımız zaman compilerların tam bir &lt;strong&gt;kara kutu&lt;/strong&gt; olduğunu s&amp;ouml;yleyebiliriz. &amp;Ccedil;&amp;uuml;nk&amp;uuml; compilerlar yazmış olduğumuz &lt;strong&gt;kaynak kodu input&lt;/strong&gt; olarak alırlar , i&amp;ccedil;eride &lt;strong&gt;sihir&lt;/strong&gt; ger&amp;ccedil;ekleşir ve &lt;strong&gt;output olarak .NET assemblyleri&lt;/strong&gt; &amp;uuml;retirler. Compiler aslında bu sihrin ger&amp;ccedil;ekleşmesi sırasında yazmış olduğumuz kod ile ilgili pek &amp;ccedil;ok &lt;strong&gt;analiz&lt;/strong&gt; yapar ve bir takım &lt;strong&gt;yapılar&lt;/strong&gt; oluşturur. Ancak &lt;strong&gt;.NET assemblysi&lt;/strong&gt; &amp;uuml;retilmesiyle beraber compiler yaratmış olduğu bu yapıları tamamen &lt;strong&gt;siler&lt;/strong&gt; ve &lt;strong&gt;unutur&lt;/strong&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;Ayrıca &lt;strong&gt;syntax highlighting, go to definition, formatting veya refactoring&lt;/strong&gt; gibi &amp;uuml;retkenliğimizi arttıracak olan &amp;ouml;zelliklerde de baktığımız zaman &lt;strong&gt;IDE&lt;/strong&gt; tarafından sağlanan bu &amp;ouml;zelliklere &lt;strong&gt;sıkı sıkıya&lt;/strong&gt; bağlı olduğumuz g&amp;ouml;rmekteyiz. Developer olarak kendi ihtiya&amp;ccedil;larımızı karşılayacak olan &lt;strong&gt;refactoring&lt;/strong&gt; mekanizmalarını ger&amp;ccedil;ekleştirmemiz olduk&amp;ccedil;a zor. Aslında &lt;strong&gt;syntax highlighting, go to definition, formatting veya refactoring&lt;/strong&gt; gibi &amp;ouml;zellikleri incelediğimizde t&amp;uuml;m bu &amp;ouml;zellikler &lt;strong&gt;arka planda compiler&amp;rsquo;ın kodu derleme ve Assembly &amp;uuml;retme&lt;/strong&gt; sırasında kullanmış ve yaratmış olduğu yapıları kullanmakta.&lt;/p&gt;
&lt;p align="justify"&gt;T&amp;uuml;m okuduklarımızı d&amp;uuml;ş&amp;uuml;nd&amp;uuml;ğ&amp;uuml;m&amp;uuml;ze &lt;strong&gt;Roslyn&lt;/strong&gt; projesi ile ama&amp;ccedil;lanan compilerın kara kutu olmaktan &amp;ccedil;ıkarılarak ve i&amp;ccedil;erisinde bulunan bilgilerin bir &lt;strong&gt;API&lt;/strong&gt; vasıtasıyla developerlara sunulmasıdır. Bu doğrultuda da &lt;strong&gt;C# ve VB&lt;/strong&gt; compilerları &lt;strong&gt;kendi dillerinde !!! &lt;/strong&gt;yani &lt;strong&gt;managed&lt;/strong&gt; programlama dilleriyle &lt;strong&gt;yeniden&lt;/strong&gt; implemente edilemekte. Evet yanlış okunmadınız :) Bir takım tarihsel nedenlerden dolayı C# ve VB compilerları&lt;strong&gt; C++&lt;/strong&gt; programlama dili ile yazılmıştır. Ancak &lt;strong&gt;Roslyn&lt;/strong&gt; projesinden &lt;strong&gt;C# ve VB compilerları kendi dillerinde yeniden yazılmaktalar.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2fopeningcompiler.jpg" alt="" width="536" height="290" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Compiler i&amp;ccedil;erisindeki yapıları bir &lt;strong&gt;API&lt;/strong&gt; ile dışarı sunulması peki developerlar i&amp;ccedil;in neler sağlayacak ? Aslında yapılabilecek pek &amp;ccedil;ok şey bulunmakta. İlk aklımıza gelen, &amp;ouml;zellikle &lt;strong&gt;dinamik programlama dillerinde&lt;/strong&gt; g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;m&amp;uuml;z &lt;strong&gt;Read-Eval-Print Loop&amp;rsquo;lar&lt;/strong&gt; artık implemente edilebilir durumda olacak. &lt;strong&gt;Programlama dili&lt;/strong&gt; i&amp;ccedil;erisindeki &lt;strong&gt;scripting yeteneğinin &lt;/strong&gt;bu şekilde hayata ge&amp;ccedil;tiğini g&amp;ouml;r&amp;uuml;yor olacağız. Bunun yanında&lt;strong&gt; Meta-Programming&lt;/strong&gt; dediğimiz aslında &lt;strong&gt;program yazan program&lt;/strong&gt; olarak T&amp;uuml;rk&amp;ccedil;e&amp;rsquo;ye &amp;ccedil;evirebileceğimiz mekanizmalarda artık ger&amp;ccedil;ekleştirilebiliyor olacak. Ayrıca &lt;strong&gt;Language-Object-Model&amp;rsquo;a&lt;/strong&gt; sahip olarak, yazılan kod &amp;uuml;zerinde &lt;strong&gt;t&amp;uuml;m analizleri &lt;/strong&gt;yapabiliyor olacağız. Kendi yazacağımız &lt;strong&gt;extensionlar veya uygulamalar&lt;/strong&gt; ile &lt;strong&gt;&amp;ccedil;ok &amp;ccedil;eşitli kendimize &amp;ouml;zel refactoring mekanizmalarını&lt;/strong&gt; hayata ge&amp;ccedil;irebiliyor olacağız. Ayrıca &lt;strong&gt;DSL(Domain &amp;ndash; Spesific &amp;ndash;Languages) Embeding&lt;/strong&gt; dediğimiz kendi uygulamamıza has bir takım komutlar arasına &lt;strong&gt;C# veya VB kodu&lt;/strong&gt; yerleştirebiliyor ve bu kodları da &lt;strong&gt;istediğimiz zaman işletebilir&lt;/strong&gt; durumda oluyor olacağız.&lt;/p&gt;
&lt;h2&gt;Roslyn APIs&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2fcompilerpipeline.JPG" alt="" width="543" height="96" /&gt;&lt;/p&gt;
&lt;p&gt;Yazmış olduğumuz kodların .NET assembly&amp;rsquo;si haline &amp;ccedil;evrilmesi s&amp;uuml;reci aslında compiler i&amp;ccedil;erisinde &lt;strong&gt;4 farklı&lt;/strong&gt; s&amp;uuml;reci i&amp;ccedil;erisinde barındırmakta.&lt;/p&gt;
&lt;p&gt;Bunlar,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Parser :&lt;/strong&gt; Kaynak kodu ge&amp;ccedil;miş olduğu ilk s&amp;uuml;re&amp;ccedil;tir. Bu s&amp;uuml;re&amp;ccedil; i&amp;ccedil;erisinde kaynak kod parse edilerek kod &lt;strong&gt;tokenlara&lt;/strong&gt; ayrılır. Ayrılan tokenlar aynı zamanda &lt;strong&gt;yapısal&lt;/strong&gt; bir veri yapısına getirilirler. &lt;strong&gt;(Syntax Tree)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Symbols &amp;amp; Metadata Import : &lt;/strong&gt;Bu aşamada kaynak kod i&amp;ccedil;erisindeki &lt;strong&gt;tanımlamalar&lt;/strong&gt; bulunur ve analiz edilir. Daha sonrasında ise &lt;strong&gt;sembol tabloları&lt;/strong&gt; oluşturulması amacıyla bu tanımlamalar ile ilgili &lt;strong&gt;metadatalar&lt;/strong&gt; okunarak &lt;strong&gt;sembol tabloları&lt;/strong&gt; oluşturulur. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binder :&lt;/strong&gt; Bu aşamada da &lt;strong&gt;sembol tablosundaki&lt;/strong&gt; tanımlamalarla &lt;strong&gt;kod i&amp;ccedil;erisinde yapılmış&lt;/strong&gt; olan tanımlamalar eşleştirilir. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IL Emitter :&lt;/strong&gt; Son aşama olan bu aşamada ise t&amp;uuml;m oluşturulan&lt;strong&gt; yapılar ve bilgiler birleştirilerek .NET Assembly&amp;rsquo;si oluşturulur. &lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Peki &lt;strong&gt;Compiler API&lt;/strong&gt;&amp;rsquo;ları tam olarak bu s&amp;uuml;re&amp;ccedil;lerin neresine oturmakta ?&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2fCompilerAPIs.jpg" alt="" width="534" height="200" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Compiler API&amp;rsquo;larını incelediğimizde aslında her bir s&amp;uuml;reci ayrı olarak i&amp;ccedil;erisinde barındıran farklı API&amp;rsquo;ları g&amp;ouml;rmekteyiz. &lt;strong&gt;Parsing s&amp;uuml;reci&lt;/strong&gt; i&amp;ccedil;erisinde &lt;strong&gt;Syntax Tree API&lt;/strong&gt; bulunurken bu API ile Parsing işlemi s&amp;uuml;recinde &amp;uuml;retilen &lt;strong&gt;Syntax Tree&lt;/strong&gt; &amp;uuml;zerinde işlemler ger&amp;ccedil;ekleştirilebilmekte. Aynı şekilde Symbol API, Binding and Flow APIs ve Emit API da geri kalan s&amp;uuml;re&amp;ccedil;ler ile ilgili işlemleri i&amp;ccedil;erlerinde barındırmakta.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;nceki paragraflarda &lt;strong&gt;IDE&lt;/strong&gt; i&amp;ccedil;erisinde bulunan ve developerların &amp;ouml;zellikle &amp;uuml;retkenliklerini arttıran &amp;ouml;zelliklerin aslında compiler tarafından &amp;uuml;retilen yapıları kullandığından bahsetmiştik. Peki hangi &amp;ouml;zellikler hangi aşamadaki bilgileri ve API&amp;rsquo;ları kullanmakta ?&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2flanguageservices.jpg" alt="" width="545" height="286" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Formatting, colorizer ve outlining&lt;/strong&gt; gibi &amp;ouml;zelliklerin &lt;strong&gt;Parsing&lt;/strong&gt; işlemi sonrasında &amp;uuml;retilen &lt;strong&gt;Syntax Tree&amp;rsquo;yi&lt;/strong&gt; kullandığını g&amp;ouml;rmekteyiz. &lt;strong&gt;Navigate To ve Object Browser&lt;/strong&gt; &amp;ouml;zellikleri de &lt;strong&gt;Symbol API&lt;/strong&gt; tarafından sunulan &lt;strong&gt;Sembol Tablosuna&lt;/strong&gt; dayanmakta. &lt;strong&gt;Intellisense, Rename, Extract Method, Go To Definition&lt;/strong&gt; gibi IDE i&amp;ccedil;erisinde bulunan pek &amp;ccedil;ok &amp;ouml;zellikte &lt;strong&gt;Binding&lt;/strong&gt; işlemi sonucunda &amp;uuml;retilen yapılara dayanmakta. &lt;strong&gt;Edit and Continue&lt;/strong&gt; ise &lt;strong&gt;Emit API&lt;/strong&gt; tarafından ger&amp;ccedil;ekleştirilmekte.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Compiler as Service&lt;/strong&gt; konsepti aslında olduk&amp;ccedil;a geniş ve i&amp;ccedil;erisinde pek &amp;ccedil;ok bilgiyi barındıran bir konsept. &lt;strong&gt;Roslyn&lt;/strong&gt; projesinin tamamlanmasıyla beraber pek &amp;ccedil;ok &amp;ouml;zelliğin geleceğini ve &amp;ccedil;ok yaratıcı uygulamaların ortaya &amp;ccedil;ıkacağını s&amp;ouml;ylemek sanırım yanlış olmaz. Bu uzun soluklu projeyi en başından itibaren takip etmenizi şiddetle &amp;ouml;neriyorum.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Roslyn&lt;/strong&gt; projesinin ne zaman tamamlanacağını soracak olursanız a&amp;ccedil;ıkcası bunun i&amp;ccedil;in s&amp;uuml;re vermenin &amp;ccedil;ok doğru olacağını d&amp;uuml;ş&amp;uuml;nm&amp;uuml;yorum. Ancak şunu s&amp;ouml;yleyebilirim ki &lt;strong&gt;C# 5.0&lt;/strong&gt; ile gelmiyor olacak :)&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Roslyn&lt;/strong&gt; projesinin şu anda &lt;strong&gt;CTP&lt;/strong&gt; s&amp;uuml;r&amp;uuml;m&amp;uuml; bulunmakta. Bu s&amp;uuml;r&amp;uuml;m&amp;uuml; &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27746" target="_blank"&gt;buradaki&lt;/a&gt; adresten indirip kurabileceğiniz gibi aynı zamanda &lt;strong&gt;NuGet Package Manager&amp;rsquo;a&lt;/strong&gt; Roslyn yazarak ta projenize ekleyebilirsiniz ;) .&lt;/p&gt;
&lt;p align="justify"&gt;Bir sonraki yazımızda Roslyn ile derinlere dalıyoruz ;)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkayilknur/~4/Z0wPwxb5lpw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/ilkayilknur/~3/Z0wPwxb5lpw/post.aspx</link>
      <author>ilkayilknur</author>
      <comments>http://www.ilkayilknur.com/post/2012/01/25/The-Roslyn-Project-5N1K.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ilkayilknur.com/post.aspx?id=ea2e25cb-b56d-477b-85a7-cde4d56d624d</guid>
      <pubDate>Wed, 25 Jan 2012 13:34:00 +0200</pubDate>
      <category>C#</category>
      <category>Roslyn</category>
      <dc:publisher>ilkayilknur</dc:publisher>
      <pingback:server>http://www.ilkayilknur.com/pingback.axd</pingback:server>
      <pingback:target>http://www.ilkayilknur.com/post.aspx?id=ea2e25cb-b56d-477b-85a7-cde4d56d624d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ilkayilknur.com/trackback.axd?id=ea2e25cb-b56d-477b-85a7-cde4d56d624d</trackback:ping>
      <wfw:comment>http://www.ilkayilknur.com/post/2012/01/25/The-Roslyn-Project-5N1K.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ilkayilknur.com/syndication.axd?post=ea2e25cb-b56d-477b-85a7-cde4d56d624d</wfw:commentRss>
    <feedburner:origLink>http://www.ilkayilknur.com/post.aspx?id=ea2e25cb-b56d-477b-85a7-cde4d56d624d</feedburner:origLink></item>
    <item>
      <title>Object,Collection ve Dictionary Initializers</title>
      <description>&lt;p align="justify"&gt;Merhaba Arkadaşlar,&lt;/p&gt;  &lt;p align="justify"&gt;Bu yazımızda sizlerle &lt;strong&gt;C# 3.0&lt;/strong&gt; sürümünden itibaren bizlerle olan ve C# tarafında object’lerin ve collection’ların yaratılması sırasında developerlara oldukça kolaylık sağlayan &lt;strong&gt;Object &amp;amp; Collection &amp;amp; Dictionary Initiliazers&lt;/strong&gt; konusunu inceliyor olacağız.&lt;/p&gt;  &lt;p align="justify"&gt;İlk olarak &lt;strong&gt;Object Initializers&lt;/strong&gt; tarafına bakarsak &lt;strong&gt;Object Initializer&lt;/strong&gt; yapısı basit olarak biz developerların özellikle object yaratımı sırasında objectlerin propertylerine ilk değerleri atamamız konusunda &lt;strong&gt;syntax&lt;/strong&gt; bakımından oldukça kolaylık sağlamakta. Bunun yanında Object Initiliazers özellikle &lt;strong&gt;LINQ sorgularında ve anonymous type yaratımında&lt;/strong&gt; da hayati önem arzetmekte.&lt;/p&gt;  &lt;p align="justify"&gt;Şimdi öncelikle basit bir sınıf tanımlayalım ve daha sonra Object Initializer mekanizmasıyla yaratmış olduğumuz object’in propertylerini ilk değerlerine set edelim.&lt;/p&gt;  &lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;class&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MyClass&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; Property1 { &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; Property2 { &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MySecondClass&lt;/font&gt;&lt;/span&gt; Property3 { &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MySecondClass&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;/span&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; MyProperty { &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;; &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p align="justify"&gt;Şimdi object initializer kullanarak MyClass tipinden bir nesne örneği yaratalım.&lt;/p&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size: 9.8pt"&gt;MyClass&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt; myClass = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MyClass&lt;/font&gt;&lt;/span&gt;()&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     Property1 = 1,&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     Property2 = &lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Property2&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     Property3 = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MySecondClass&lt;/font&gt;&lt;/span&gt;()&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     {&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;          MyProperty = 3&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;     }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;};&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;

&lt;p align="justify"&gt;Gördüğünüz gibi oldukça basit bir şekilde nesnemizi yarattık. Peki arka planda neler oluyor ? Öyleyse hemen arka plana geçelim ve bakalım neler oluyor. &lt;/p&gt;

&lt;p align="justify"&gt;Farklılıklar aslında yaratılan &lt;strong&gt;IL&lt;/strong&gt; tarafında gerçekleşmekte.&lt;/p&gt;

&lt;p&gt;.method private hidebysig static void Main(string[] args) cil managed 
  &lt;br /&gt;{ 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .entrypoint 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .maxstack 3 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .locals init ( 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [0] class ConsoleApplication2.MyClass myClass, 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [1] class ConsoleApplication2.MyClass &amp;lt;&amp;gt;g__initLocal0, 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [2] class ConsoleApplication2.MySecondClass &amp;lt;&amp;gt;g__initLocal1) 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0000: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0001: newobj instance &lt;strong&gt;void ConsoleApplication2.MyClass::.ctor() 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0006: stloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0007: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0008: ldc.i4.&lt;strong&gt;1&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0009: callvirt &lt;strong&gt;instance void ConsoleApplication2.MyClass::set_Property1(int32)&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_000e: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_000f: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0010: ldstr &lt;strong&gt;&amp;quot;Property2&amp;quot;&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0015: callvirt &lt;strong&gt;instance void ConsoleApplication2.MyClass::set_Property2(string) 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_001a: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_001b: ldloc.&lt;strong&gt;1&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_001c: newobj &lt;strong&gt;instance void ConsoleApplication2.MySecondClass::.ctor() 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0021: stloc.2 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0022: ldloc.2 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0023: ldc.i4.&lt;strong&gt;3&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0024: &lt;strong&gt;callvirt instance void ConsoleApplication2.MySecondClass::set_MyProperty(int32) 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0029: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_002a: ldloc.&lt;strong&gt;2&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_002b: &lt;strong&gt;callvirt instance void ConsoleApplication2.MyClass::set_Property3(class ConsoleApplication2.MySecondClass) 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0030: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0031: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0032: stloc.0 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0033: ret 

  &lt;br /&gt;}&lt;/p&gt;

&lt;p align="justify"&gt;Akışa baktığımızda aslında bizim yaptığımız işlemleri compiler arka planda &lt;strong&gt;açarak,&lt;/strong&gt; &lt;strong&gt;teker teker tüm işlemleri gerçekleştirmekte &lt;/strong&gt;ve yaklaşık olarak aşağıdaki kod örneğine çevirmekte.&lt;/p&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size: 9.8pt"&gt;MyClass&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt; myClass = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MyClass&lt;/font&gt;&lt;/span&gt;();&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;myClass.Property1 = 1;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;myClass.Property2 = &lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Property2&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MySecondClass&lt;/font&gt;&lt;/span&gt; second = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MySecondClass&lt;/font&gt;&lt;/span&gt;();&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;second.MyProperty = 3;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;myClass.Property3 = second;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p align="justify"&gt;Şimdi yukarıdaki kod ile bir önceki object initializer kullanarak yazdığımız kodu karşılaştırdığımızda özellikle &lt;strong&gt;okunulabilirlik&lt;/strong&gt; bakımından oldukça büyük farklar bulunmakta. İlk kullanımda kodu okuyan developer hemen hızlı bir şekilde set edilen değerleri okuyup geçerken diğer örnekte ise &lt;strong&gt;tek tek referansları&lt;/strong&gt; kontrol etmek zorunda kalmakta ve daha çok zaman kaybetmekte. Bunun yanında kodu yazan developer da ikinci kullanımda birinci kullanıma göre daha çok zaman kaybetmekte.&lt;/p&gt;

&lt;p align="justify"&gt;İşte bu noktadaki problemi çözmek için &lt;strong&gt;compiler&lt;/strong&gt; devreye girmekte ve developerlara oldukça kolay bir tanımlama &lt;strong&gt;syntax’ı&lt;/strong&gt; sağlarken arka planda da bu syntax’ın kullanıldığı kısımları yeniden yazarak aslında arka planda yine klasik kullanımı muhafaza etmekte ;)&lt;/p&gt;

&lt;h2&gt;Collection Initializers&lt;/h2&gt;

&lt;p align="justify"&gt;&lt;strong&gt;C# 3.0&lt;/strong&gt; ile beraber gelen bir diğer syntax kolaylığı ise &lt;strong&gt;Collection Initializers’dı&lt;/strong&gt;. &lt;strong&gt;Collection Initializers&lt;/strong&gt; ile yarattığımız koleksiyonlar içerisine elemanları hızlı bir şekilde yerleştirebilmekteyiz.&lt;/p&gt;

&lt;p&gt;Örneğin,&lt;/p&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size: 9.8pt"&gt;List&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&amp;gt; list = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&amp;gt;()&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;      1,2,3,4,5,6,7&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;};&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p align="justify"&gt;yukarıdaki gibi bir kullanımla bir &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; tipinden biri koleksiyon örneği yarattıktan sonra içerisine 1’den 7’ye kadar elemanları ekleyebilmekteyiz. Bu kullanım aslında &lt;strong&gt;C# 3.0&lt;/strong&gt; öncesinde &lt;strong&gt;array’ler&lt;/strong&gt; için geçerliydi. Ancak C# 3.0 ile beraber bu kullanım kolaylığı &lt;strong&gt;collection&lt;/strong&gt; tipleri için de getirildi. &lt;/p&gt;

&lt;p&gt;Peki collection initializers kullandığımızda arka planda neler oluyor ? :)&lt;/p&gt;

&lt;p&gt;.method private hidebysig static void Main(string[] args) cil managed 
  &lt;br /&gt;{ 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .entrypoint 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .maxstack 2 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .locals init ( 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [0] class [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt; list, 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [1] class [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt; &amp;lt;&amp;gt;g__initLocal0) 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0000: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0001: newobj instance void [mscorlib]&lt;strong&gt;System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::.ctor() 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0006: stloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0007: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0008: &lt;strong&gt;ldc.i4.1&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0009: &lt;strong&gt;callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0)&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_000e: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_000f: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0010: &lt;strong&gt;ldc.i4.2&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0011: &lt;strong&gt;callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0) 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0016: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0017: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0018: &lt;strong&gt;ldc.i4.3&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0019: &lt;strong&gt;callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0)&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_001e: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_001f: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0020: &lt;strong&gt;ldc.i4.4&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0021: &lt;strong&gt;callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0)&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0026: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0027: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0028: &lt;strong&gt;ldc.i4.5 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_0029:&lt;strong&gt; callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0)&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_002e: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_002f: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0030: &lt;strong&gt;ldc.i4.6&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0031: &lt;strong&gt;callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0)&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0036: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0037: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0038: &lt;strong&gt;ldc.i4.7&lt;/strong&gt; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0039: &lt;strong&gt;callvirt instance void [mscorlib]System.Collections.Generic.List`1&amp;lt;int32&amp;gt;::Add(!0) 
    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; L_003e: nop 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_003f: ldloc.1 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0040: stloc.0 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; L_0041: ret 

  &lt;br /&gt;}&lt;/p&gt;

&lt;p align="justify"&gt;Burada da baktığımızda aslında yazdığımız kodun aksine compiler arka planda öncelikle bir &lt;strong&gt;List nesne örneği&lt;/strong&gt; yaratmakta ve sonrasında da tüm elemanları List tipinin &lt;strong&gt;Add&lt;/strong&gt; metodunu kullanarak eklemekte. Aslında bizim normalde de kullanmamız gereken bu metodu &lt;strong&gt;compiler&lt;/strong&gt; arka planda kendisi kullanmış ve biz developerlara daha kısa bir &lt;strong&gt;syntax&lt;/strong&gt; ile uygulama geliştirme imkanı sağlamış.&lt;/p&gt;

&lt;p align="justify"&gt;&lt;strong&gt;Collection Initializer&lt;/strong&gt; mekanizmasını kullanmamız için sadece tek bir kısıt bulunmakta. O da tipimizin &lt;strong&gt;IEnumerable&lt;/strong&gt; &lt;strong&gt;interface’ini&lt;/strong&gt; implemente etmesi ve tip içerisinde &lt;strong&gt;Add&lt;/strong&gt; metodunun bulunması. Burada aklımıza gelen bir soru bulunmakta. Bu da arka planda generate edilen &lt;strong&gt;IL&lt;/strong&gt; kodlarında &lt;strong&gt;IEnumerable&lt;/strong&gt; interface’inin kullanılmamasına rağmen collection initializers mekanizmasında neden zorunlu olarak IEnumerable interface’inin &lt;strong&gt;tip tarafından implemente edilmek zorunda olduğu&lt;/strong&gt;. Bunun nedeni de aslında C# programlama dili tasarım ekibi tarafından alınmış bir karara dayanmakta. &lt;strong&gt;C# 3.0&lt;/strong&gt; ile ilgili araştırmalar yaparken collection Initializers yapısının destekleneceği noktalar ekip tarafından incelenmiş ve bu özellik collection tipleri ile sınırlı bırakılmış ve bu nedenle de tipin &lt;strong&gt;IEnumerable&lt;/strong&gt; interface’ini implemente etmesi gerektiği zorunlu hale getirilmiştir.&lt;/p&gt;

&lt;h2&gt;Dictionary Initializers&lt;/h2&gt;

&lt;p align="justify"&gt;Bu yazımızda son olarak bahsedeceğimiz konu da Dictionary Initializers. Collection Initializers ile collection tipleri içerise kolay bir şekilde eleman ekleyebilirken, aslında bu ihtiyaca benzer bir durum da dictionary tipleri için doğmakta. Bazı durumlarda yarattığımız Dictionary’ler içerisine elemanları teker teker eklememiz gerekebilmekte. Bu noktada da yine Collection Initializers’da olduğu gibi C# tarafından sağlanan kolay bir syntax ile dictionary içerisine ilk elemanları atabilmekteyiz. &lt;/p&gt;

&lt;p align="justify"&gt;Dictionary Initializers’ın kullanımı ise şu şekilde olmakta.&lt;/p&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size: 9.8pt"&gt;Dictionary&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;, &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&amp;gt; a = &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Dictionary&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;, &lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&amp;gt;()&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;      {1,&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Bir&amp;quot;&lt;/font&gt;&lt;/span&gt;},&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;      {2,&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;İki&amp;quot;&lt;/font&gt;&lt;/span&gt;},&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;      {3,&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Üç&amp;quot;&lt;/font&gt;&lt;/span&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;};&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Peki &lt;strong&gt;compiler&lt;/strong&gt; arka planda ne yapmakta ? &lt;/p&gt;

&lt;p&gt;Dictionary&amp;lt;int, string&amp;gt; &lt;strong&gt;&amp;lt;&amp;gt;g__initLocal0&lt;/strong&gt; = new Dictionary&amp;lt;int, string&amp;gt;(); 

  &lt;br /&gt;&amp;lt;&amp;gt;g__initLocal0.&lt;strong&gt;Add&lt;/strong&gt;(1, &amp;quot;Bir&amp;quot;); 

  &lt;br /&gt;&amp;lt;&amp;gt;g__initLocal0.&lt;strong&gt;Add&lt;/strong&gt;(2, &amp;quot;İki&amp;quot;); 

  &lt;br /&gt;&amp;lt;&amp;gt;g__initLocal0.&lt;strong&gt;Add&lt;/strong&gt;(3, &amp;quot;Uc&amp;quot;); 

  &lt;br /&gt;Dictionary&amp;lt;int, string&amp;gt; a =&lt;strong&gt; &amp;lt;&amp;gt;g__initLocal0&lt;/strong&gt;; 

  &lt;br /&gt;&lt;/p&gt;

&lt;p align="justify"&gt;Compiler kimi zaman bu yazımızda da gördüğümüz gibi bir takım kolay &lt;strong&gt;syntax&lt;/strong&gt; yapılarını developerlara sunarken arka planda aslında bu syntax yapısını klasik kullanımlara geri çevirerek developerların yazılım geliştirme sürelerini kısaltmayı amaçlamakta. Kimi zaman da keywordler veya modifierlar sunarak arka planda kurduğu generic yapılarla çok daha farklı işleri biz developerlara hissettirmeden gerçekleştirmekte. ;)&lt;/p&gt;

&lt;p align="justify"&gt;Hoşçakalın &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkayilknur/~4/tX9qS6z-Jtk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/ilkayilknur/~3/tX9qS6z-Jtk/post.aspx</link>
      <author>ilkayilknur</author>
      <comments>http://www.ilkayilknur.com/post/2012/01/21/ObjectCollection-ve-Dictionary-Initializers.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ilkayilknur.com/post.aspx?id=df9952f3-2679-46f4-a11e-aa776012febc</guid>
      <pubDate>Sat, 21 Jan 2012 15:34:00 +0200</pubDate>
      <category>C#</category>
      <category>C# 3.0</category>
      <category>Arka Planda Neler Oluyor ?</category>
      <dc:publisher>ilkayilknur</dc:publisher>
      <pingback:server>http://www.ilkayilknur.com/pingback.axd</pingback:server>
      <pingback:target>http://www.ilkayilknur.com/post.aspx?id=df9952f3-2679-46f4-a11e-aa776012febc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ilkayilknur.com/trackback.axd?id=df9952f3-2679-46f4-a11e-aa776012febc</trackback:ping>
      <wfw:comment>http://www.ilkayilknur.com/post/2012/01/21/ObjectCollection-ve-Dictionary-Initializers.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ilkayilknur.com/syndication.axd?post=df9952f3-2679-46f4-a11e-aa776012febc</wfw:commentRss>
    <feedburner:origLink>http://www.ilkayilknur.com/post.aspx?id=df9952f3-2679-46f4-a11e-aa776012febc</feedburner:origLink></item>
    <item>
      <title>C# 5.0 Async &amp; Await Arka Planda Neler Oluyor ?</title>
      <description>&lt;p align="justify"&gt;Merhaba Arkadaşlar,&lt;/p&gt;
&lt;p align="justify"&gt;Sizlerle şu ana kadar &lt;strong&gt;C# 5.0&lt;/strong&gt; ile beraber gelecek olan &lt;strong&gt;Asenkron Programlama&lt;/strong&gt; yeniliklerini hangi noktalarda kullanabileceğimizi inceledik. Ancak bildiğiniz gibi her programlama dili yeniliği aslında arka planda &lt;strong&gt;yeni bir sihir&lt;/strong&gt; yaratır. Daha &amp;ouml;nce kodumuzu &lt;strong&gt;neredeyse tamamen değiştirerek&lt;/strong&gt; asenkron hale getirirken artık sadece 1-2 ufak değişiklikle kodumuzu asenkron bir şekilde &amp;ccedil;alışacak hale getirebiliyoruz. Peki ger&amp;ccedil;ekten arka planda neler oluyor ? Compiler neler yapıyor da biz sadece 1-2 kod değişikliği ile kodumuzu asenkron hale getirebiliyoruz.&lt;/p&gt;
&lt;p align="justify"&gt;İlk olarak aşağıdaki gibi bir asenkron metodumuz olduğunu d&amp;uuml;ş&amp;uuml;nelim.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;async&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&amp;gt; DownloadStringAsync(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt; Url)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;WebClient&lt;/span&gt;&lt;/span&gt; client = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;WebClient&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;await&lt;/span&gt;&lt;/span&gt; client.DownloadStringTaskAsync(Url);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p align="justify"&gt;Şimdi yazmış olduğumuz kodu derleyelim ve sonrasında &lt;strong&gt;Reflector&lt;/strong&gt; yardımıyla a&amp;ccedil;alım ve bakalım derleme sonucunda asenkron metodumuz compiler tarafından &lt;strong&gt;nasıl yeniden yazılmış&lt;/strong&gt; ?&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;&lt;em&gt;&lt;span style="color: #ff0000;"&gt;&lt;img style="FLOAT: left" src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2fattention.png" alt="" width="123" height="123" /&gt;Dikkat : Yazının bu kısmından sonrası aşırı miktarda compiler tarafından &amp;uuml;retilen kod i&amp;ccedil;ermektedir. Eğer compiler tarafından &amp;uuml;retilen kodlara karşı alerjiniz varsa bu satırlar sizin i&amp;ccedil;in son &amp;ccedil;ıkıştır. Ancak yazıyı buraya kadar okuduysanız sizinde aslında arka planda benim gibi neler olduğunu merak ediyor olduğunuzu d&amp;uuml;ş&amp;uuml;n&amp;uuml;yorum :)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;private static Task&amp;lt;string&amp;gt; DownloadStringAsync(string Url) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DownloadStringAsync&amp;gt;d__0 d__; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d__ = new &amp;lt;DownloadStringAsync&amp;gt;d__0(0) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Url = Url, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;gt;t__MoveNextDelegate = new Action(d__.MoveNext), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $builder = AsyncTaskMethodBuilder&amp;lt;string&amp;gt;.Create() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d__.MoveNext(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return d__.$builder.Task; &lt;br /&gt;}&lt;/p&gt;
&lt;p align="justify"&gt;G&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi compiler, bizim yazmış olduğumuz &lt;strong&gt;DownloadStringAsync&lt;/strong&gt; isimli metodu arka planda bir takım tipleri kullanarak yeniden yazdı.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;nceki yazılarımızdan da hatırlayacağımız &amp;uuml;zere asenkron metotların d&amp;ouml;n&amp;uuml;ş tipi &lt;strong&gt;Task&lt;/strong&gt;, &lt;strong&gt;Task&amp;lt;T&amp;gt;&lt;/strong&gt; veya &lt;strong&gt;void&lt;/strong&gt; olmak zorunda. Ancak bu d&amp;ouml;n&amp;uuml;ş tipini her zaman bizim yaratıp d&amp;ouml;nd&amp;uuml;rmemiz gerekmemekte. Nitekim &lt;strong&gt;await&lt;/strong&gt; kullanarak &lt;strong&gt;WebClient&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;DownloadStringTaskAsync&lt;/strong&gt; metodunu &amp;ccedil;ağırdığımızda bu metodun d&amp;ouml;n&amp;uuml;ş tipinin &lt;strong&gt;string&lt;/strong&gt; olduğunu kolayca g&amp;ouml;rebilmekteyiz. Ancak g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi biz aslında asenkron metodumuzun d&amp;ouml;n&amp;uuml;ş tipini &lt;strong&gt;Task&amp;lt;string&amp;gt;&lt;/strong&gt; olarak belirttik ve baktığımız zaman &lt;strong&gt;return&lt;/strong&gt; ifadesinde de &lt;strong&gt;string&lt;/strong&gt; d&amp;ouml;nd&amp;uuml;rd&amp;uuml;k. Baktığımız zaman bu kullanım aslında &lt;strong&gt;tamamen legal&lt;/strong&gt;. Ancak tabi ki bu işlem arka planda &lt;strong&gt;bir takım d&amp;ouml;n&amp;uuml;ş&amp;uuml;mler&lt;/strong&gt; gerektirmekte. Bu d&amp;ouml;n&amp;uuml;ş&amp;uuml;mlerden ilki de &lt;strong&gt;Task&amp;lt;string&amp;gt;&lt;/strong&gt; tipinin arka planda yaratılması ve metottan geri d&amp;ouml;nd&amp;uuml;r&amp;uuml;lerek yazdığımız &lt;strong&gt;kodun arka planda da legalleştirilmesi&lt;/strong&gt;. İşte &lt;strong&gt;compiler&lt;/strong&gt; tarafından yazılan kodda g&amp;ouml;rm&amp;uuml;ş olduğunuz &lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipi tam da bu işi ger&amp;ccedil;ekleştirmekte.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;public struct&lt;/span&gt; AsyncTaskMethodBuilder&amp;lt;TResult&amp;gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public Task&amp;lt;TResult&amp;gt;&lt;/span&gt; Task { get; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public void &lt;/span&gt;SetResult(TResult result); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public void&lt;/span&gt; SetException(Exception exception); &lt;br /&gt;}&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipi g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi i&amp;ccedil;erisinde metot tarafından d&amp;ouml;nd&amp;uuml;r&amp;uuml;lecek olan &lt;strong&gt;Task&lt;/strong&gt; tipini ve metot işletilmesinden sonra da bu &lt;strong&gt;Task&lt;/strong&gt; tipi i&amp;ccedil;erisine sonucu yazmakta kullanılan &lt;strong&gt;SetResult&lt;/strong&gt; isimli metodu i&amp;ccedil;ermekte. Bir de tabi eğer metot &amp;ccedil;alışması sırasında bir &lt;strong&gt;exception&lt;/strong&gt; oluşursa bu exception&amp;rsquo;ı yine &lt;strong&gt;Task&lt;/strong&gt; tipi i&amp;ccedil;erisine yerleştirmek i&amp;ccedil;in bir de &lt;strong&gt;SetException&lt;/strong&gt; metodunu bulundurmakta.&lt;/p&gt;
&lt;p align="justify"&gt;Compiler tarafından yeniden yazılan &lt;strong&gt;DownloadStringAsync&lt;/strong&gt; isimli metodumuz i&amp;ccedil;erisinde bir de &lt;strong&gt;&amp;lt;DownloadStringAsync&amp;gt;d__0&lt;/strong&gt; isimli bir tipin kullanıldığını g&amp;ouml;r&amp;uuml;yoruz. Bu tip te compiler tarafından yazılmış olan ve asenkron akışı tamamen i&amp;ccedil;erisinde barındıran (enkaps&amp;uuml;le eden) bir tip. Compiler tarafından yaratılmış olan bu tipin kodu ise şu şekilde.&lt;/p&gt;
&lt;p&gt;[CompilerGenerated] &lt;br /&gt;private sealed class &amp;lt;DownloadStringAsync&amp;gt;d__0 &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Fields &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool $__disposing; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public AsyncTaskMethodBuilder&amp;lt;string&amp;gt; $builder; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int &amp;lt;&amp;gt;1__state; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string &amp;lt;&amp;gt;3__Url; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Action &amp;lt;&amp;gt;t__MoveNextDelegate; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private TaskAwaiter&amp;lt;string&amp;gt; &amp;lt;a1&amp;gt;t__$await3; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public WebClient &amp;lt;client&amp;gt;5__1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Url;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Methods &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DebuggerHidden] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &amp;lt;DownloadStringAsync&amp;gt;d__0(int &amp;lt;&amp;gt;1__state) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;&amp;gt;1__state = &amp;lt;&amp;gt;1__state; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DebuggerHidden] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.$__disposing = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.MoveNext(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;&amp;gt;1__state = -1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void MoveNext() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string &amp;lt;&amp;gt;t__result; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string &amp;lt;1&amp;gt;t__$await2; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool $__doFinallyBodies = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.&amp;lt;&amp;gt;1__state != 1) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.&amp;lt;&amp;gt;1__state != -1) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;client&amp;gt;5__1 = new WebClient(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;a1&amp;gt;t__$await3 = this.&amp;lt;client&amp;gt;5__1.DownloadStringTaskAsync(this.Url).GetAwaiter&amp;lt;string&amp;gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.&amp;lt;a1&amp;gt;t__$await3.IsCompleted) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Label_0089; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;&amp;gt;1__state = 1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $__doFinallyBodies = false; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;a1&amp;gt;t__$await3.OnCompleted(this.&amp;lt;&amp;gt;t__MoveNextDelegate); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;&amp;gt;1__state = 0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label_0089: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;1&amp;gt;t__$await2 = this.&amp;lt;a1&amp;gt;t__$await3.GetResult(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;a1&amp;gt;t__$await3 = new TaskAwaiter&amp;lt;string&amp;gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;gt;t__result = &amp;lt;1&amp;gt;t__$await2; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception &amp;lt;&amp;gt;t__ex) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;&amp;gt;1__state = -1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.$builder.SetException(&amp;lt;&amp;gt;t__ex); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;&amp;gt;1__state = -1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.$builder.SetResult(&amp;lt;&amp;gt;t__result); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/p&gt;
&lt;p align="justify"&gt;Compiler tarafından yaratılan tipin &lt;strong&gt;constructor&lt;/strong&gt; metoduna &lt;strong&gt;state&lt;/strong&gt; isimli bir &lt;strong&gt;int&lt;/strong&gt; değerin parametre olarak alındığını g&amp;ouml;r&amp;uuml;yoruz. Bu &lt;strong&gt;state&lt;/strong&gt; değişkeni aslında bizim asenkron metot akışımızda &lt;strong&gt;&amp;ouml;nemli&lt;/strong&gt; bir yere sahip. Bu y&amp;uuml;zden &lt;strong&gt;&amp;lt;&amp;gt;1__state&lt;/strong&gt; alanını aklımızın bir k&amp;ouml;şesinde tutalım ;)&lt;/p&gt;
&lt;p align="justify"&gt;Aslında sizin de g&amp;ouml;receğiniz &amp;uuml;zere &lt;strong&gt;&amp;lt;DownloadStringAsync&amp;gt;d__0&lt;/strong&gt; tipi i&amp;ccedil;erisinde asenkron akışı y&amp;ouml;neten metot &lt;strong&gt;MoveNext&lt;/strong&gt; metodu. Bu metot i&amp;ccedil;erisinde peki neler oluyor ?&lt;/p&gt;
&lt;p align="justify"&gt;Bu metodu incelemeden &amp;ouml;nce &lt;strong&gt;DownloadStringAsync&lt;/strong&gt; isimli metodumuzun i&amp;ccedil;erisine geri d&amp;ouml;nelim ve yapılan değer atamalarına bir bakalım.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;private static Task&amp;lt;string&amp;gt;&lt;/span&gt; DownloadStringAsync(string Url) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DownloadStringAsync&amp;gt;d__0 d__; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d__ = new &amp;lt;DownloadStringAsync&amp;gt;d__0(0) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Url = Url, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;gt;t__MoveNextDelegate = new Action(d__.MoveNext), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $builder = AsyncTaskMethodBuilder&amp;lt;string&amp;gt;.Create() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d__.MoveNext(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return d__.$builder.Task; &lt;br /&gt;}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;İlk olarak constructor metoda 0 değeri parametre olarak ge&amp;ccedil;ilmiş. Bu değer de hatırlayacağımız &amp;uuml;zere &lt;strong&gt;&amp;lt;DownloadStringAsync&amp;gt;d__0&lt;/strong&gt; tipi i&amp;ccedil;erisindeki state değişkenine atanmakta.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;strong&gt;&amp;lt;&amp;gt;t__MoveNextDelegate&lt;/strong&gt; isimli delegate tipine de yine &lt;strong&gt;&amp;lt;DownloadStringAsync&amp;gt;d__0&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;MoveNext&lt;/strong&gt; metodu atanmakta.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Daha sonra ise yukarıda incelemiş olduğumuz &lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipinin &lt;strong&gt;Create&lt;/strong&gt; isimli &lt;strong&gt;Factory&lt;/strong&gt; metodu &amp;ccedil;ağrılarak ilgili tipten bir nesne &amp;ouml;rneği $&lt;strong&gt;builder&lt;/strong&gt; değişkenine atanmakta.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Son olarak ise nesne &amp;ouml;rneği yarattıktan sonra bu &amp;ouml;rnek &amp;uuml;zerinden &lt;strong&gt;MoveNext&lt;/strong&gt; metodu &amp;ccedil;ağrılmakta.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;Evet şimdi &lt;strong&gt;MoveNext&lt;/strong&gt; metoduna geri d&amp;ouml;n&amp;uuml;yoruz.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;MoveNext&lt;/strong&gt; metodu i&amp;ccedil;erisinde ilk &amp;ccedil;ağrım sırasında &lt;strong&gt;state&lt;/strong&gt; değişkenimizin değeri &lt;strong&gt;0&lt;/strong&gt;. Bu nedenle metot i&amp;ccedil;erisindeki &lt;strong&gt;2 if &lt;/strong&gt;ifadesinden de ge&amp;ccedil;erek aşağıdaki kod bloğu işletilmekte.&lt;/p&gt;
&lt;p align="justify"&gt;if (this.&amp;lt;&amp;gt;1__state != 1) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp; if (this.&amp;lt;&amp;gt;1__state != -1) &lt;br /&gt;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;client&amp;gt;5__1 = new WebClient();&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.&amp;lt;a1&amp;gt;t__$await3 = this.&amp;lt;client&amp;gt;5__1.DownloadStringTaskAsync(this.Url).GetAwaiter&amp;lt;string&amp;gt;();&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (this.&amp;lt;a1&amp;gt;t__$await3.IsCompleted) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Label_0089; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.&amp;lt;&amp;gt;1__state = 1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $__doFinallyBodies = false; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.&amp;lt;a1&amp;gt;t__$await3.OnCompleted(this.&amp;lt;&amp;gt;t__MoveNextDelegate);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;/p&gt;
&lt;p align="justify"&gt;}&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ccedil;alışan koda baktığımızda bizim &lt;strong&gt;orjinal kodumuz&lt;/strong&gt; i&amp;ccedil;erisinde yazmış olduğumuz kodların bu kısımda olduğunu g&amp;ouml;rmekteyiz. İlk olarak &lt;strong&gt;WebClient&lt;/strong&gt; tipinden bir nesne &amp;ouml;rneği yaratılmakta ve akabinde de bu tip &amp;uuml;zerinden &lt;strong&gt;DownloadStringTaskAsync&lt;/strong&gt; isimli metot &amp;ccedil;ağrılmakta.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;nceki yazılarımızda hatırlarsanız &lt;strong&gt;async &amp;amp; await&lt;/strong&gt; kullanmamız i&amp;ccedil;in &amp;ldquo;&lt;strong&gt;awaitable pattern&lt;/strong&gt;&amp;rdquo;&amp;rsquo;ı uygulamamız gerektiğinden sık&amp;ccedil;a bahsetmiştik. İşte &lt;strong&gt;awaitable pattern&lt;/strong&gt; tam da kodumuzun bu noktasında devreye girmekte. Bir işlemin &lt;strong&gt;awaitable&lt;/strong&gt; olması i&amp;ccedil;in aslında i&amp;ccedil;erisinde &lt;strong&gt;GetAwaiter&lt;/strong&gt; metodu ile aşağıdaki tipi d&amp;ouml;nd&amp;uuml;rmesi gerekmekte.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;public struct&lt;/span&gt; TaskAwaiter&amp;lt;TResult&amp;gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public bool&lt;/span&gt; IsCompleted { get; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public void&lt;/span&gt; OnCompleted(Action continuation); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public TResult&lt;/span&gt; GetResult(); &lt;br /&gt;}&lt;/p&gt;
&lt;p align="justify"&gt;Bu tip aslında compiler tarafında olduk&amp;ccedil;a &amp;ouml;nem arz etmekte. Bunun nedeni ise compiler arka planda yani yukarıdaki kodlarda bu tip &amp;uuml;zerinden asenkron işlemin tamamlanıp tamamlanmadığını kontrol etmekte. Eğer işlem tamamlanmadıysa &lt;strong&gt;OnCompleted&lt;/strong&gt; metodunu kullanarak bir &lt;strong&gt;callback&lt;/strong&gt; ataması yapmakta. Tabi birde işlemin sonucunu elde edebilmek i&amp;ccedil;in &lt;strong&gt;GetResult&lt;/strong&gt; metodunu &amp;ccedil;ağırmakta.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;TaskAwaiter&lt;/strong&gt; tipi ile ilgili a&amp;ccedil;ıklamamızdan sonra tekrar &lt;strong&gt;MoveNext&lt;/strong&gt; isimli metoda geri d&amp;ouml;nersek artık sanırım neden &lt;strong&gt;GetAwaiter&lt;/strong&gt; metodunun &amp;ccedil;ağrıldığını daha fazla a&amp;ccedil;ıklamamıza gerek yok. :)&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;GetAwaiter&lt;/strong&gt; metodunun &amp;ccedil;ağrılması sonrasında elde edilen &lt;strong&gt;TaskAwaiter&lt;/strong&gt; tipi &amp;uuml;zerinden ise bir takım kontroller yapılmakta. Bu kontrollerden ilki yapılan asenkron &amp;ccedil;ağrımın sonlanıp sonlanmadığı ile ilgili. Eğer işlem sonlandıysa kod akışı doğrudan &lt;strong&gt;Label_0089&lt;/strong&gt; isimli alana &lt;strong&gt;goto&lt;/strong&gt; ifadesi ile y&amp;ouml;nlenmekte. Eğer sonlamadıysa &amp;ouml;ncelikle &lt;strong&gt;state&lt;/strong&gt; değişkeni &lt;strong&gt;1&lt;/strong&gt;&amp;rsquo;e &amp;ccedil;ekilmekte daha sonra ise &lt;strong&gt;TaskAwaiter&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;OnCompleted&lt;/strong&gt; metodu &amp;ccedil;ağrılmakta ve &lt;strong&gt;callback&lt;/strong&gt; olarak ta &lt;strong&gt;&amp;lt;DownloadStringAsync&amp;gt;d__0&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;&amp;lt;&amp;gt;t__MoveNextDelegate&lt;/strong&gt; alanı verilmekte. Yazımızın başlarında hatırlarsanız bu alana da &lt;strong&gt;MoveNext&lt;/strong&gt; metodu atanmıştı !!! . Bu da demek oluyor ki asenkron işlem tamamlandıktan sonra yine &lt;strong&gt;MoveNext&lt;/strong&gt; metodu &amp;ccedil;ağırılıyor olacak. Sonrasında ise &lt;strong&gt;return&lt;/strong&gt; ifadesi işletilerek &lt;strong&gt;MoveNext&lt;/strong&gt; metodu sonlanmakta ve kontrol &amp;ccedil;ağıran koda geri d&amp;ouml;nmekte yani bizim kodumuza. Bu şekilde de aslında bizim kullanıcı aray&amp;uuml;z&amp;uuml;m&amp;uuml;z cevap verebilir durumda olmakta.&lt;/p&gt;
&lt;p align="justify"&gt;Şimdi asenkron &amp;ccedil;ağrım sonrasında işlemin sonlandığını ve &lt;strong&gt;TaskAwaiter&lt;/strong&gt; tarafından &lt;strong&gt;OnCompleted&lt;/strong&gt; metoduna parametre olarak ge&amp;ccedil;irilen &lt;strong&gt;MoveNext&lt;/strong&gt; metodunu işlemin sonlanmış olduğunu d&amp;uuml;ş&amp;uuml;nerek tekrar işletelim. Bir &amp;uuml;stteki paragrafta &lt;strong&gt;state&lt;/strong&gt; değişkenine &lt;strong&gt;1&lt;/strong&gt; değeri atanmıştı. Bu nedenle &lt;strong&gt;MoveNext&lt;/strong&gt; metodu i&amp;ccedil;erisindeki &lt;strong&gt;if &lt;/strong&gt;kontrolleri girmeden doğrudan devam edecek ve ilk olarak &lt;strong&gt;state&lt;/strong&gt; değişkenine &lt;strong&gt;0&lt;/strong&gt; değeri atanacak ve sonrasında da &lt;strong&gt;Label_0089&lt;/strong&gt;&amp;nbsp; ismiyle etiketlenmiş kod bloğu &amp;ccedil;alışacak. Bu kod bloğu i&amp;ccedil;erisinde de &lt;strong&gt;TaskAwaiter&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;GetResult&lt;/strong&gt; isimli metot kullanılarak asenkron metodun sonucu alınmakta.&amp;nbsp; Son olarak ise catch ifadesinin altında bulunan kısım işletilmekte ve &lt;strong&gt;state&lt;/strong&gt; değişkenine &lt;strong&gt;&amp;ndash;1&lt;/strong&gt; değeri atanmakta ve son olarakta &lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;SetResult&lt;/strong&gt; metodu kullanarak işlem sonucu &lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipi i&amp;ccedil;erisindeki &lt;strong&gt;Task&amp;rsquo;ın&lt;/strong&gt; i&amp;ccedil;erisine yazılmakta.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;MoveNext&lt;/strong&gt; metoduna dikkat ettiyseniz bir de &lt;strong&gt;try-catch&lt;/strong&gt; bloğu bulunmakta. Bu blok i&amp;ccedil;erisinde de asenkron işlem sırasında oluşabilecek olan &lt;strong&gt;Exceptionlar&lt;/strong&gt; yakalanmakta ve bir exception yakalanması durumunda &lt;strong&gt;state&lt;/strong&gt; değişkeni &lt;strong&gt;&amp;ndash;1&amp;rsquo;e&lt;/strong&gt; &amp;ccedil;ekilmekte ve oluşan exception da &lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipi i&amp;ccedil;erisindeki SetException metodu &amp;ccedil;ağrılarak &lt;strong&gt;AsyncTaskMethodBuilder&lt;/strong&gt; tipinde bulunan &lt;strong&gt;Task&amp;rsquo;ın&lt;/strong&gt; i&amp;ccedil;erisindeki &lt;strong&gt;Exception&lt;/strong&gt; alanına yazılmakta.&lt;/p&gt;
&lt;p align="justify"&gt;Genel yapıyı incelediğimizde aslında aklımıza &lt;strong&gt;C#&lt;/strong&gt; dili i&amp;ccedil;erisinde uzun s&amp;uuml;reden beri bulunan &lt;a href="http://www.ilkayilknur.com/post/2011/12/15/C-Iterators-Yield-Keywordu-ve-Arka-Planda-Neler-Oluyor.aspx" target="_blank"&gt;yield keyword&amp;uuml;n&amp;uuml;n alt yapısı&lt;/a&gt; gelmekte. &lt;strong&gt;Yield&lt;/strong&gt; keyword&amp;uuml; hatırlayacağınız &amp;uuml;zere arka planda bir &lt;strong&gt;state machine&lt;/strong&gt; yaratmaktaydı. &lt;strong&gt;C# 5.0&lt;/strong&gt; ile beraber gelen asenkron programlama yeniliklerinde de compiler aslında yine benzer bir yapıyı kullanarak bir &lt;strong&gt;state machine&lt;/strong&gt; yaratmakta ve bu state machine i&amp;ccedil;erisinde de &lt;strong&gt;callback atamaların&lt;/strong&gt;ı ger&amp;ccedil;ekleştirmekte. Peki compiler &lt;strong&gt;neden bir state machine yaratmakta ?&lt;/strong&gt; Aslında bunun durumu olduk&amp;ccedil;a basit. Asenkron işlemin &lt;strong&gt;y&amp;ouml;netimini kolay yapabilmek ve mevcutta bulunulan durumları saklayabilmek&lt;/strong&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;zet olarak &lt;strong&gt;C# 5.0 ile gelen asenkron programlama yeniliklerinin arka planında callback tabanlı bir state machine yapısı yatmakta &lt;/strong&gt;diyebiliriz.&lt;/p&gt;
&lt;p align="justify"&gt;Şu ana kadar &lt;strong&gt;Task&lt;/strong&gt; tipinden bir nesne &amp;ouml;rneği d&amp;ouml;nd&amp;uuml;ren asenkron metodun arka planını inceledik. Peki &lt;strong&gt;void&lt;/strong&gt; d&amp;ouml;n&amp;uuml;ş tipine sahip olan asenkron metotlar nasıl yeniden yazılmakta ? Aslında &amp;ccedil;okta fazla bir değişiklik bulunmamakta. Bu y&amp;uuml;zden de uzun uzadıya bir &amp;ouml;rnek yapıp incelememize gerek yok diye d&amp;uuml;ş&amp;uuml;n&amp;uuml;yorum. Aradaki tek fark &lt;strong&gt;AsyncTaskMethodBuilder&amp;lt;T&amp;gt;&lt;/strong&gt; tipi yerine adından da anlayabileceğiniz &amp;uuml;zere &lt;strong&gt;AsyncVoidMethodBuilder&lt;/strong&gt; tipinin kullanımı olmakta. Compiler d&amp;ouml;n&amp;uuml;ş değeri &lt;strong&gt;void&lt;/strong&gt; olduğu i&amp;ccedil;in herhangi bir &lt;strong&gt;Task&lt;/strong&gt; tipi &amp;uuml;retme işine girmemekte. :)&lt;/p&gt;
&lt;p align="justify"&gt;Compilerların arka olanda ger&amp;ccedil;ekleştirdikleri işlemleri bilmek bazılarımıza gereksiz geliyor olsa da aslında bence olduk&amp;ccedil;a &amp;ouml;nemli. &amp;Ccedil;&amp;uuml;nk&amp;uuml; bir takım kullanımlar aslında baktığımızda bize &lt;strong&gt;legal&lt;/strong&gt; olarak g&amp;ouml;z&amp;uuml;kmese de compiler arka planda bu programlama diline has &amp;ouml;zellikleri legal bir şekle sokmakta ve bu detayları da biliyor olmamız aslında bizim en doğru kullanımları yapmamızı sağlamakta. ;)&lt;/p&gt;
&lt;p align="justify"&gt;Umarım sizler i&amp;ccedil;in faydalı bir makale olmuştur.&lt;/p&gt;
&lt;p align="justify"&gt;Hoş&amp;ccedil;akalın,&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkayilknur/~4/wCY_f9rcjow" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/ilkayilknur/~3/wCY_f9rcjow/post.aspx</link>
      <author>ilkayilknur</author>
      <comments>http://www.ilkayilknur.com/post/2012/01/11/C-50-Async-Await-Arka-Planda-Neler-Oluyor.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ilkayilknur.com/post.aspx?id=598f9104-6743-4808-93bd-1394b25a78bd</guid>
      <pubDate>Wed, 11 Jan 2012 11:59:00 +0200</pubDate>
      <category>C#</category>
      <category>C# 5.0</category>
      <dc:publisher>ilkayilknur</dc:publisher>
      <pingback:server>http://www.ilkayilknur.com/pingback.axd</pingback:server>
      <pingback:target>http://www.ilkayilknur.com/post.aspx?id=598f9104-6743-4808-93bd-1394b25a78bd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ilkayilknur.com/trackback.axd?id=598f9104-6743-4808-93bd-1394b25a78bd</trackback:ping>
      <wfw:comment>http://www.ilkayilknur.com/post/2012/01/11/C-50-Async-Await-Arka-Planda-Neler-Oluyor.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ilkayilknur.com/syndication.axd?post=598f9104-6743-4808-93bd-1394b25a78bd</wfw:commentRss>
    <feedburner:origLink>http://www.ilkayilknur.com/post.aspx?id=598f9104-6743-4808-93bd-1394b25a78bd</feedburner:origLink></item>
    <item>
      <title>Asenkron WCF Servis Çağrımlarında C# 5.0 ile Gelen Async &amp; Await Kullanımı</title>
      <description>&lt;p&gt;Merhaba Arkadaşlar,&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;C# 5.0&lt;/strong&gt; ile gelecek olan &lt;strong&gt;Asenkron Programlama&lt;/strong&gt; yeniliklerinin &amp;ouml;nemli bir kısmını &lt;a href="http://www.ilkayilknur.com/category/C-50.aspx" target="_blank"&gt;&amp;ouml;nceki&lt;/a&gt; yazılarımızda inceledik. Şu ana kadar farkettiyseniz asenkron programalama yaptığımız belki de en &amp;ouml;nemli noktalardan biri olan bir konuya hi&amp;ccedil; değinmedik. Bu konu da &lt;strong&gt;asenkron web servis &amp;ccedil;ağrıları&lt;/strong&gt;. &amp;Ouml;zellikle &lt;strong&gt;Silverlight ya da Windows Phone&lt;/strong&gt; uygulamaları gibi istemci tarafında &amp;ccedil;alışan uygulamalar geliştiriyorsanız asenkron web servis &amp;ccedil;ağrısı yapmamak neredeyse &lt;strong&gt;imkansız&lt;/strong&gt;. Tabi aslında asenkron servis &amp;ccedil;ağrıları sadece bu teknolojiler ile sınırlı değil. &lt;strong&gt;WPF&lt;/strong&gt; veya &lt;strong&gt;ASP.NET&lt;/strong&gt; tabanlı web uygulamalarımızda da asenkron web servis &amp;ccedil;ağrıları ger&amp;ccedil;ekleştirebilmekteyiz.&lt;/p&gt;
&lt;p align="justify"&gt;Asenkron olarak&amp;nbsp; yaptığımız web servis &amp;ccedil;ağrılarının yanıtını almak i&amp;ccedil;in bildiğiniz gibi &lt;strong&gt;callback&lt;/strong&gt; y&amp;ouml;ntemini kullanmaktayız. Yani asenkron olarak web servis &amp;ccedil;ağrısını yaptıktan sonra &lt;strong&gt;kontrol bize geri d&amp;ouml;nmekte&lt;/strong&gt; ve web servisten yanıt &lt;strong&gt;d&amp;ouml;nd&amp;uuml;kten sonra callback olarak bildirdiğimiz kod par&amp;ccedil;ası işletilmekte&lt;/strong&gt;. Bu y&amp;ouml;ntemin dezavatajlarını, kodumuzu nasıl d&amp;uuml;zensiz hale getirdiğini ve uygulamamızın &amp;ouml;l&amp;ccedil;eklenebilirliğini nasıl d&amp;uuml;ş&amp;uuml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml; &amp;ouml;nceki yazılarımızda incelemiştik. İşte tam bu noktada web servis &amp;ccedil;ağrılarında &lt;strong&gt;C# 5.0 ile gelen async &amp;amp; await &lt;/strong&gt;ifadelerinin kullanılamayacağını sorduğunuzu duyar gibiyim :)&lt;/p&gt;
&lt;p align="justify"&gt;Bu noktada aslında &lt;strong&gt;web servis proxy&amp;rsquo;lerinin awaitable pattern&amp;rsquo;a&lt;/strong&gt; g&amp;ouml;re oluşturulması bizim async &amp;amp; await kullanmamız i&amp;ccedil;in yeterli. &amp;Ouml;rnek vermek gerekirse bir web servis metodu &lt;strong&gt;int&lt;/strong&gt; bir değer d&amp;ouml;nd&amp;uuml;r&amp;uuml;yorsa d&amp;ouml;n&amp;uuml;ş tipinin &lt;strong&gt;Task&amp;lt;int&amp;gt;&lt;/strong&gt; tipi olması o metodun &lt;strong&gt;asenkron olarak işletilmesi ve yanıtının async ve await &lt;/strong&gt;kullanılarak alınması i&amp;ccedil;in yeterli olmakta.&lt;/p&gt;
&lt;p align="justify"&gt;Şu anda Visual Studio i&amp;ccedil;erisinde baktığımızda &lt;strong&gt;Add New Service Reference&lt;/strong&gt; penceresi i&amp;ccedil;erisinde yukarıda bahsettiğimiz bi&amp;ccedil;imde proxy kodu &amp;uuml;retecek bir mekanizma bulunmamakta. Bu tabi ki hi&amp;ccedil; olmayacak anlamına gelmiyor. &lt;strong&gt;Gelecek Visual Studio s&amp;uuml;r&amp;uuml;m&amp;uuml;nde &lt;/strong&gt;bu &amp;ouml;zellikle geliyor olacak. Peki biz bu &amp;ouml;zelliği beklemeden asenkron web servis &amp;ccedil;ağrılarımızı async ve await ile nasıl y&amp;ouml;netebiliriz ?&lt;/p&gt;
&lt;p align="justify"&gt;&amp;Ouml;ncelikle basit bir WCF servis metodu yazalım ve ardından da bu metodumuzu WPF istemcisi tarafından &amp;ccedil;ağıralım.&lt;/p&gt;
&lt;p align="justify"&gt;Yazacağımız web servis metodu olduk&amp;ccedil;a basit olacak ve parametre olarak aldığı 2 sayıyı toplayarak geri d&amp;ouml;nd&amp;uuml;recek. Ancak bu işlemi yapmadan &amp;ouml;nce biz &lt;strong&gt;işlemi 3 saniye&lt;/strong&gt; bekleteceğiz o şekilde metottan değeri geri d&amp;ouml;nd&amp;uuml;receğiz. B&amp;ouml;ylece web servis metodumuz bizim i&amp;ccedil;in &lt;strong&gt;asenkron &amp;ccedil;ağrı yapmak i&amp;ccedil;in anlamlı&lt;/strong&gt; hale gelecek. ;) Aksi takdirde zaten 2 sayısı toplayan bir web servis metodu i&amp;ccedil;in asenkron &amp;ccedil;ağrı yapamaya &amp;ccedil;ok ta gerek yok sanki :)&lt;/p&gt;
&lt;p align="justify"&gt;İlk olarak WCF servisimizin Service Contract&amp;rsquo;ının geliştirelim.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;[&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;ServiceContract&lt;/span&gt;&lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;IMathService&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    [&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;OperationContract&lt;/span&gt;&lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; Add(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; x, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; y);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Sıra geldi contract'ını belirlediğimiz WCF servisimizin implementasyonuna.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathService&lt;/span&gt;&lt;/span&gt; : &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;IMathService&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt;&lt;/span&gt; IMathService Members&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;   &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; Add(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; x, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; y)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;   {&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;        &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Thread&lt;/span&gt;&lt;/span&gt;.Sleep(3000);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;        &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt; x + y;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;   }
 
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;G&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi metot sonucunu d&amp;ouml;nmeden &amp;ouml;nce Thread.Sleep metodunu kullanarak işlemin 3 saniye beklemesini sağladıktan sonra 2 sayıyı toplayıyıp servis metodundan geriye d&amp;ouml;nd&amp;uuml;k.&lt;/p&gt;
&lt;p align="justify"&gt;WCF tarafında son olarak ise servisimizin konfig&amp;uuml;rasyonunu yapıyoruz ve servisi &lt;a href="http://localhost/MathService"&gt;http://localhost/MathService&lt;/a&gt; &lt;strong&gt;endpoint&amp;rsquo;i&lt;/strong&gt; &amp;uuml;zerinde dışarıya a&amp;ccedil;ıyoruz.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;services&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;service&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;MathServiceLib.MathService&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;address&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;""&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;binding&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;wsHttpBinding&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;                              &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;contract&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;MathServiceLib.IMathService&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;identity&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;dns&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;localhost&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;identity&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;address&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;mex&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;binding&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;mexHttpBinding&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;                                 &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;contract&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;IMetadataExchange&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;host&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;baseAddresses&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;add&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;baseAddress&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;http://localhost/MathService&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;baseAddresses&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;host&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;service&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;services&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;behaviors&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;behavior&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;serviceMetadata&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;httpGetEnabled&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;True&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;serviceDebug&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;False&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;behavior&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;behaviors&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="font-size: 9.8pt; color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Şimdi sıra geldi &lt;strong&gt;WPF istemci &lt;/strong&gt;uygulamamıza. İstemci uygulamamızın aray&amp;uuml;z&amp;uuml; de şu şekilde olacak.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;Label&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Content&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"1. Sayı"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"28"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Left"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;              Margin&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"12,12,0,0"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Top"&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;Label&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Content&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"2. Sayı"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"28"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Left"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;              Margin&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"12,44,0,0"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Top"&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;TextBox&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"23"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Left"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"81,12,0,0"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;              Name&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"txtSayi1"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Top"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"120"&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;TextBox&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"23"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Right"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"0,46,302,0"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;              Name&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"txtSayi2"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Top"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"120"&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Content&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Topla"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"23"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Left"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;              Margin&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"12,78,0,0"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Name&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"btnTopla"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Top"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp; Click&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"btnTopla_Click"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"75"&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;Label&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"28"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; HorizontalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Left"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"106,73,0,0"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;             Name&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"lblSonuc"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt; VerticalAlignment&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Top"&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;
&lt;img style="border-style: initial; border-color: initial; color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; white-space: normal;" src="http://www.ilkayilknur.com/image.axd?picture=2012%2f1%2fScreen.JPG" alt="" width="527" height="146" /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p align="justify"&gt;Arka plan kodlarına ge&amp;ccedil;meden son olarakta WCF servisimizin referansını WPF projemize ekliyoruz. Servis referansını eklerken de &lt;strong&gt;Add New Service Reference &lt;/strong&gt;penceresindeki &lt;strong&gt;Advanced&lt;/strong&gt; butonuna tıklayıp a&amp;ccedil;ılan pencere i&amp;ccedil;erisindeki &lt;strong&gt;asenkron &amp;ccedil;ağrım &lt;/strong&gt;kodlarının da &amp;uuml;retilmesini sağlayan checkbox&amp;rsquo;ı se&amp;ccedil;iyoruz.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://www.ilkayilknur.com/image.axd?picture=GenerateAsync.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 4px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="GenerateAsync" src="http://www.ilkayilknur.com/image.axd?picture=GenerateAsync_thumb.jpg" border="0" alt="GenerateAsync" width="390" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Yukarıdaki gibi asenkron web servis &amp;ccedil;ağrım kodlarını &amp;uuml;rettiğimizde ilgili proxy tipi i&amp;ccedil;erisinde &lt;strong&gt;AddAsync &lt;/strong&gt;isimli bir metodun olduğunu g&amp;ouml;receğiz. Bunun yanında bir de tip i&amp;ccedil;erisinde &lt;strong&gt;AddCompleted &lt;/strong&gt;isimli bir &lt;strong&gt;event &lt;/strong&gt;bulunmakta. Şu anda elimizde var olan imkanlarla &lt;strong&gt;callback&lt;/strong&gt; mekanizmasını kullanarak asenkron &amp;ccedil;ağrımları ger&amp;ccedil;ekleştirdiğimizi hatırlamamız gerekirse şu anda yapabileceğimiz implementasyon aşağıdaki gibi olacaktır.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;/span&gt; btnTopla_Click(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;/span&gt; sender, &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt;&lt;/span&gt; e)
{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt; client = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    client.AddCompleted += (_sender, _e) =&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    {&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;            lblSonuc.Content = &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;.Format(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"Sonuc : {0}"&lt;/span&gt;&lt;/span&gt;, _e.Result);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    };&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    client.AddAsync(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;.Parse(txtSayi1.Text), &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;.Parse(txtSayi2.Text));&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Peki esas konumuza geri d&amp;ouml;nersek &lt;strong&gt;async&amp;amp;await &lt;/strong&gt;kullanarak ve &lt;strong&gt;callback &lt;/strong&gt;mekanizmasını kullanmadan asenkron &amp;ccedil;ağrılarımızı nasıl&amp;nbsp; y&amp;ouml;netebiliriz.&lt;/p&gt;
&lt;p align="justify"&gt;Bu noktada şu anda kullanabileceğimiz 2 y&amp;ouml;ntem bulunmakta.&lt;/p&gt;
&lt;h2&gt;Task.Factory.FromAsync&lt;/h2&gt;
&lt;p align="justify"&gt;Y&amp;ouml;ntemlerimizden ilki &lt;strong&gt;Task&lt;/strong&gt; tipi i&amp;ccedil;erisinde bulunan &lt;strong&gt;FromAsync&lt;/strong&gt; metodu. Bu metot &lt;strong&gt;Begin/End &lt;/strong&gt;yapısı ile asenkronluğu sağlayan yani &lt;strong&gt;Asynchronous Programming Model &lt;/strong&gt;Pattern&amp;rsquo;nına uygun olan işlemlerin &lt;strong&gt;Task &lt;/strong&gt;tipi i&amp;ccedil;erisine alınması ve Task tipi ile &lt;strong&gt;y&amp;ouml;netilmesini &lt;/strong&gt;sağlamakta. B&amp;ouml;ylece artık yapacağımız &amp;ccedil;ağrımlarda ve diğer işlemlerde de bu metottan d&amp;ouml;nen &lt;strong&gt;Task&lt;/strong&gt; tipini rahat&amp;ccedil;a kullanabileceğiz.&lt;/p&gt;
&lt;p align="justify"&gt;İşte bu y&amp;ouml;ntemi kullanarak aslında &lt;strong&gt;proxy &lt;/strong&gt;tipimiz i&amp;ccedil;erisinde metotlara &lt;strong&gt;yeni bir metot ekleme &lt;/strong&gt;imkanına sahibiz. &amp;Ouml;yleyse hemen proxy tipimiz i&amp;ccedil;in bir &lt;strong&gt;extension metot &lt;/strong&gt;ger&amp;ccedil;ekleştirelim.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Extensions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;      public&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;&amp;gt; AddTaskAsync(&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;                         &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt; client, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; x, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; y)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      {&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;        &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;/span&gt;.Factory.FromAsync&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;&amp;gt;(client.BeginAdd(x, y, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;), &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;                                        client.EndAdd);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Şimdi web servis metodumuz async &amp;amp; await kullanabileceğimiz duruma geldi. Yani &lt;strong&gt;awaitable pattern&lt;/strong&gt;'a uydu. &amp;Ouml;yleyse async ve await kullanarak asenkron &amp;ccedil;ağrımızı ger&amp;ccedil;ekleştirelim.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;async&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;/span&gt; btnTopla_Click(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;/span&gt; sender, &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt;&lt;/span&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt; client = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; result = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;await&lt;/span&gt;&lt;/span&gt; client.AddTaskAsync(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;.Parse(txtSayi1.Text), &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;                     &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;.Parse(txtSayi2.Text));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    lblSonuc.Content = &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;.Format(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"Sonuc : {0}"&lt;/span&gt;&lt;/span&gt;, result);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Evet g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi asenkron &amp;ccedil;ağrımı ger&amp;ccedil;ekleştirdik. Ancak uyguladığımız y&amp;ouml;nteme bakarsak bizim i&amp;ccedil;im &lt;strong&gt;maliyetli bir y&amp;ouml;ntem&lt;/strong&gt; olduğunu g&amp;ouml;rmekteyiz. Bunun nedeni de &lt;strong&gt;her bir web servis metodu i&amp;ccedil;in yeni bir extension metot ger&amp;ccedil;ekleştirmemiz.&lt;/strong&gt; Bize aslında &lt;strong&gt;otomatik&lt;/strong&gt; proxy kodu &amp;uuml;retimi sırasında &lt;strong&gt;devreye girecek &lt;/strong&gt;olan birşeyler lazım. &amp;Ouml;yleyse gelin diğer y&amp;ouml;ntemimizi inceleyelim.&lt;/p&gt;
&lt;h2&gt;TaskWsdlImporterExtension&lt;/h2&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Visual Studio Async CTP&lt;/strong&gt; k&amp;uuml;t&amp;uuml;phanesini bilgisayarımıza kurduktan sonra &lt;strong&gt;Documents\Microsoft Visual Studio Async CTP\Samples&lt;/strong&gt; klas&amp;ouml;r&amp;uuml; i&amp;ccedil;erisinde &lt;strong&gt;hem C# hem de VB &lt;/strong&gt;ile yazılmış &amp;ccedil;eşitli asenkron programlama &amp;ouml;rnekleri gelmekte. Bu &amp;ouml;rneklerden biri de &lt;strong&gt;Stock Quotes &lt;/strong&gt;isimli &amp;ouml;rnek. Bu &amp;ouml;rnek i&amp;ccedil;erisinde bir istemci uygulaması tarafından WCF servis &amp;ccedil;ağrılmakta ve bu servis &amp;uuml;zerinden de hisse senedi kağıtlarının fiyatları alınmakta. &amp;Ouml;rnek i&amp;ccedil;erisinde yapılan WCF servis &amp;ccedil;ağrıları ise bizim &amp;ouml;rneklerimizde olduğu gibi &lt;strong&gt;asenkron &amp;ccedil;ağrılar&lt;/strong&gt;. Ancak burada client tarafında proxy codelarının &amp;uuml;retilmesi sırasında bir &lt;strong&gt;extension k&amp;uuml;t&amp;uuml;phanesi&lt;/strong&gt; kullanılmış ve kullanılan extension k&amp;uuml;t&amp;uuml;phanesi ise proje i&amp;ccedil;erisine konulmuş. Bu k&amp;uuml;t&amp;uuml;phane biz WCF servisini &lt;strong&gt;projemize servis referansı eklerken devreye girmekte &lt;/strong&gt;ve proxy kodlarını async &amp;amp; await keywordleri ile beraber kullanılabilir bi&amp;ccedil;imde yani &lt;strong&gt;awaitable pattern&lt;/strong&gt;&amp;rsquo;a uygun olarak &amp;uuml;retmekte. Şimdi bu &amp;ouml;rneği a&amp;ccedil;ıp derleyelim ve oluşan dll&amp;rsquo;i projemize referans olarak ekleyelim.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://www.ilkayilknur.com/image.axd?picture=TaskwsdlImporter.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 4px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="TaskwsdlImporter" src="http://www.ilkayilknur.com/image.axd?picture=TaskwsdlImporter_thumb.jpg" border="0" alt="TaskwsdlImporter" width="204" height="251" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Şimdi bir &amp;ouml;nceki y&amp;ouml;ntemimizde projemize eklemiş olduğumuz WCF servis referansını kaldıralım ve sonrasında istemci uygulamamızın &lt;strong&gt;config &lt;/strong&gt;dosyasına aşağıdaki config ayarları ekleyelim. B&amp;ouml;ylece projemize eklemiş olduğumuz extension, servis proxy kodunun &amp;uuml;retilmesi sırasında devreye giriyor olacak.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;client&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;metadata&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;wsdlImporters&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;extension&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;TaskWsdlImportExtension.TaskAsyncWsdlImportExtension, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;                                                     TaskWsdlImportExtension&lt;/span&gt;&lt;/span&gt;"&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;wsdlImporters&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;metadata&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;client&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;span style="font-size: 9.8pt; color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Şimdi WCF servisimizin referansını yine yukarıda yaptığımız gibi asenkron &amp;ccedil;ağrım metotlarının da &amp;uuml;retilmesi se&amp;ccedil;eneğini se&amp;ccedil;erek yeniden ekleyelim.&lt;/p&gt;
&lt;p&gt;Referansı ekledikten sonra oluşturulan kodlara baktığımızda &lt;strong&gt;AddTaskAsync &lt;/strong&gt;isimli bir servis metodu g&amp;ouml;remiyoruz. Ancak bakın&amp;nbsp; &lt;strong&gt;AddAsync&lt;/strong&gt; isimli metodun d&amp;ouml;n&amp;uuml;ş tipi ne oldu :)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ilkayilknur.com/image.axd?picture=AddAsync.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 4px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="AddAsync" src="http://www.ilkayilknur.com/image.axd?picture=AddAsync_thumb.jpg" border="0" alt="AddAsync" width="539" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Task&amp;lt;double&amp;gt;&lt;/strong&gt; tipi demek bizim i&amp;ccedil;in &lt;strong&gt;awaitable &lt;/strong&gt;demek :) Yani &lt;strong&gt;async &amp;amp; await &lt;/strong&gt;kullanımı demek. O zaman kodumuzu yeni metot ismine g&amp;ouml;re g&amp;uuml;ncelleyelim ve uygulamamızı &amp;ccedil;alıştıralım.&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;async&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;/span&gt; btnTopla_Click(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;/span&gt; sender, &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt;&lt;/span&gt; e)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;     &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt; client = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;MathServiceClient&lt;/span&gt;&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;     &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; result = &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;await&lt;/span&gt;&lt;/span&gt; client.AddAsync(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;.Parse(txtSayi1.Text), &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;                   &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;.Parse(txtSayi2.Text));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;     lblSonuc.Content = &lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;.Format(&lt;span style="color: "&gt;&lt;span style="color: #a31515;"&gt;"Sonuc : {0}"&lt;/span&gt;&lt;/span&gt;, result);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Uygulamayı &amp;ccedil;alıştırdığımızda g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi uygulamamız istediğimiz gibi &amp;ccedil;alıştı. Toplama isteğini servise g&amp;ouml;nderdik ve g&amp;ouml;nderdikten sonra kontrol &lt;strong&gt;uygulamaya geri d&amp;ouml;nd&amp;uuml;&lt;/strong&gt; ve sonrasında ilgili kod işletilerek yanıt ekrana yazdırıldı. Peki bu extension &lt;strong&gt;arka planda nasıl bir kod &amp;uuml;retti&lt;/strong&gt; :) Hemen metot &amp;uuml;zerinden F12&amp;rsquo;ye basarak arka planda &amp;uuml;retilen koda sı&amp;ccedil;rayalım :)&lt;/p&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 9.8pt;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt; System.Threading.Tasks.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;&amp;gt; AddAsync(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; x, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt; y) &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt; System.Threading.Tasks.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;&amp;gt;.Factory.FromAsync(&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;          &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt; System.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;, System.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;AsyncCallback&lt;/span&gt;&lt;/span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;          &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;/span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;          System.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;IAsyncResult&lt;/span&gt;&lt;/span&gt;&amp;gt;(((&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;IMathService&lt;/span&gt;&lt;/span&gt;)(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;/span&gt;)).BeginAdd), &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;    &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt; System.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;/span&gt;&amp;lt;System.&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;IAsyncResult&lt;/span&gt;&lt;/span&gt;, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;/span&gt;&amp;gt;(((&lt;span style="color: "&gt;&lt;span style="color: #2b91af;"&gt;IMathService&lt;/span&gt;&lt;/span&gt;)(&lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;/span&gt;)).EndAdd),&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: ; background: white; color: "&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;          x, y, &lt;span style="color: "&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;);
}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Siz ilk y&amp;ouml;nteme g&amp;ouml;re bir fark g&amp;ouml;rebildiniz mi ? Ben g&amp;ouml;remedim :) Sadece &lt;strong&gt;FromAsync&lt;/strong&gt; metodunun bir başka &lt;strong&gt;overload&lt;/strong&gt; hali kullanılmış :)&lt;/p&gt;
&lt;p align="justify"&gt;Asenkron web servis &amp;ccedil;ağrımları bana g&amp;ouml;re biz developerlar i&amp;ccedil;in en b&amp;uuml;y&amp;uuml;k sıkıntıyı oluşturan durumların başında gelmekte. S&amp;uuml;rekli olarak callback atamaları developerlar i&amp;ccedil;in y&amp;ouml;netmesi ve &amp;ouml;l&amp;ccedil;eklendirilmesi olduk&amp;ccedil;a sıkıntılı durumlar doğurmakta. Bu nedenle &lt;strong&gt;C# 5.0&lt;/strong&gt; ile beraber gelecek olan &lt;strong&gt;Async&amp;amp;Await&lt;/strong&gt; ile artık bu sorunları da geride bırakmış olacağız.&lt;/p&gt;
&lt;p align="justify"&gt;Makalemizi sonlandırmadan &lt;strong&gt;Web Service Referansı &lt;/strong&gt;ekleme sırasında bu &amp;ouml;zelliğin &lt;strong&gt;C#&amp;rsquo;ın 5.0 ve dolayısıyla da Visual Studio&amp;rsquo;nun bir sonraki s&amp;uuml;r&amp;uuml;m&amp;uuml;yle&lt;/strong&gt; beraber &lt;strong&gt;built-in &lt;/strong&gt;olarak geleceğini sizlere tekrardan hatırlatmak isterim. Bu makalede işlemiş olduklarımız sadece şu anda bizlere kolaylık sağlayabilecek 1-2 trick nokta. ;)&lt;/p&gt;
&lt;p align="justify"&gt;Yazımız boyunca yaptığımız &amp;ouml;rneği aşağıdaki linkten indirebilirsiniz.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a style="text-align: -webkit-auto;" href="http://www.ilkayilknur.com/file.axd?file=2012%2f1%2fAsyncWCFCalls.zip"&gt;AsyncWCFCalls.zip (167,48 kb)&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Bir sonraki makalemizde g&amp;ouml;r&amp;uuml;şmek &amp;uuml;zere,&lt;/p&gt;
&lt;p align="justify"&gt;Hoş&amp;ccedil;akalın&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkayilknur/~4/bRSLKOJPZMU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/ilkayilknur/~3/bRSLKOJPZMU/post.aspx</link>
      <author>ilkayilknur</author>
      <comments>http://www.ilkayilknur.com/post/2012/01/04/Asenkron-WCF-Servis-Cagrilarinda-C-50-ile-Gelen-Async-Await-Kullanimi.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ilkayilknur.com/post.aspx?id=a191ab11-d51a-450a-94ba-fd7f49dc0837</guid>
      <pubDate>Wed, 04 Jan 2012 22:17:00 +0200</pubDate>
      <category>Async</category>
      <category>C#</category>
      <category>C# 5.0</category>
      <category>WCF</category>
      <dc:publisher>ilkayilknur</dc:publisher>
      <pingback:server>http://www.ilkayilknur.com/pingback.axd</pingback:server>
      <pingback:target>http://www.ilkayilknur.com/post.aspx?id=a191ab11-d51a-450a-94ba-fd7f49dc0837</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.ilkayilknur.com/trackback.axd?id=a191ab11-d51a-450a-94ba-fd7f49dc0837</trackback:ping>
      <wfw:comment>http://www.ilkayilknur.com/post/2012/01/04/Asenkron-WCF-Servis-Cagrilarinda-C-50-ile-Gelen-Async-Await-Kullanimi.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ilkayilknur.com/syndication.axd?post=a191ab11-d51a-450a-94ba-fd7f49dc0837</wfw:commentRss>
    <enclosure url="http://www.ilkayilknur.com/file.axd?file=2012%2f1%2fAsyncWCFCalls.zip" length="171503" type="application/octet-stream" /><media:content url="http://www.ilkayilknur.com/file.axd?file=2012%2f1%2fAsyncWCFCalls.zip" fileSize="171503" type="application/octet-stream" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> Merhaba Arkadaşlar, C# 5.0 ile gelecek olan Asenkron Programlama yeniliklerinin &amp;ouml;nemli bir kısmını &amp;ouml;nceki yazılarımızda inceledik. Şu ana kadar farkettiyseniz asenkron programalama yaptığımız belki de en &amp;ouml;nemli noktalardan biri olan bir ko</itunes:subtitle><itunes:author>ilkayilknur</itunes:author><itunes:summary> Merhaba Arkadaşlar, C# 5.0 ile gelecek olan Asenkron Programlama yeniliklerinin &amp;ouml;nemli bir kısmını &amp;ouml;nceki yazılarımızda inceledik. Şu ana kadar farkettiyseniz asenkron programalama yaptığımız belki de en &amp;ouml;nemli noktalardan biri olan bir konuya hi&amp;ccedil; değinmedik. Bu konu da asenkron web servis &amp;ccedil;ağrıları. &amp;Ouml;zellikle Silverlight ya da Windows Phone uygulamaları gibi istemci tarafında &amp;ccedil;alışan uygulamalar geliştiriyorsanız asenkron web servis &amp;ccedil;ağrısı yapmamak neredeyse imkansız. Tabi aslında asenkron servis &amp;ccedil;ağrıları sadece bu teknolojiler ile sınırlı değil. WPF veya ASP.NET tabanlı web uygulamalarımızda da asenkron web servis &amp;ccedil;ağrıları ger&amp;ccedil;ekleştirebilmekteyiz. Asenkron olarak&amp;nbsp; yaptığımız web servis &amp;ccedil;ağrılarının yanıtını almak i&amp;ccedil;in bildiğiniz gibi callback y&amp;ouml;ntemini kullanmaktayız. Yani asenkron olarak web servis &amp;ccedil;ağrısını yaptıktan sonra kontrol bize geri d&amp;ouml;nmekte ve web servisten yanıt d&amp;ouml;nd&amp;uuml;kten sonra callback olarak bildirdiğimiz kod par&amp;ccedil;ası işletilmekte. Bu y&amp;ouml;ntemin dezavatajlarını, kodumuzu nasıl d&amp;uuml;zensiz hale getirdiğini ve uygulamamızın &amp;ouml;l&amp;ccedil;eklenebilirliğini nasıl d&amp;uuml;ş&amp;uuml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml; &amp;ouml;nceki yazılarımızda incelemiştik. İşte tam bu noktada web servis &amp;ccedil;ağrılarında C# 5.0 ile gelen async &amp;amp; await ifadelerinin kullanılamayacağını sorduğunuzu duyar gibiyim :) Bu noktada aslında web servis proxy&amp;rsquo;lerinin awaitable pattern&amp;rsquo;a g&amp;ouml;re oluşturulması bizim async &amp;amp; await kullanmamız i&amp;ccedil;in yeterli. &amp;Ouml;rnek vermek gerekirse bir web servis metodu int bir değer d&amp;ouml;nd&amp;uuml;r&amp;uuml;yorsa d&amp;ouml;n&amp;uuml;ş tipinin Task&amp;lt;int&amp;gt; tipi olması o metodun asenkron olarak işletilmesi ve yanıtının async ve await kullanılarak alınması i&amp;ccedil;in yeterli olmakta. Şu anda Visual Studio i&amp;ccedil;erisinde baktığımızda Add New Service Reference penceresi i&amp;ccedil;erisinde yukarıda bahsettiğimiz bi&amp;ccedil;imde proxy kodu &amp;uuml;retecek bir mekanizma bulunmamakta. Bu tabi ki hi&amp;ccedil; olmayacak anlamına gelmiyor. Gelecek Visual Studio s&amp;uuml;r&amp;uuml;m&amp;uuml;nde bu &amp;ouml;zellikle geliyor olacak. Peki biz bu &amp;ouml;zelliği beklemeden asenkron web servis &amp;ccedil;ağrılarımızı async ve await ile nasıl y&amp;ouml;netebiliriz ? &amp;Ouml;ncelikle basit bir WCF servis metodu yazalım ve ardından da bu metodumuzu WPF istemcisi tarafından &amp;ccedil;ağıralım. Yazacağımız web servis metodu olduk&amp;ccedil;a basit olacak ve parametre olarak aldığı 2 sayıyı toplayarak geri d&amp;ouml;nd&amp;uuml;recek. Ancak bu işlemi yapmadan &amp;ouml;nce biz işlemi 3 saniye bekleteceğiz o şekilde metottan değeri geri d&amp;ouml;nd&amp;uuml;receğiz. B&amp;ouml;ylece web servis metodumuz bizim i&amp;ccedil;in asenkron &amp;ccedil;ağrı yapmak i&amp;ccedil;in anlamlı hale gelecek. ;) Aksi takdirde zaten 2 sayısı toplayan bir web servis metodu i&amp;ccedil;in asenkron &amp;ccedil;ağrı yapamaya &amp;ccedil;ok ta gerek yok sanki :) İlk olarak WCF servisimizin Service Contract&amp;rsquo;ının geliştirelim. [ServiceContract] public&amp;nbsp;interface&amp;nbsp;IMathService { [OperationContract] double Add(double x, double y);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp; Sıra geldi contract'ını belirlediğimiz WCF servisimizin implementasyonuna. public&amp;nbsp;class&amp;nbsp;MathService : IMathService&amp;nbsp; { &amp;nbsp;&amp;nbsp; #region IMathService Members &amp;nbsp;&amp;nbsp; public&amp;nbsp;double Add(double x, double y) { Thread.Sleep(3000); return x + y; } &amp;nbsp;&amp;nbsp; #endregion } &amp;nbsp; G&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi metot sonucunu d&amp;ouml;nmeden &amp;ouml;nce Thread.Sleep metodunu kullanarak işlemin 3 saniye beklemesini sağladıktan sonra 2 sayıyı toplayıyıp servis metodundan geriye d&amp;ouml;nd&amp;uuml;k. WCF tarafında son olarak ise servisimizin konfig&amp;uuml;rasyonunu yapıyoruz ve servisi http://localhost/MathService endpoint&amp;rsquo;i &amp;uuml;zerinde dışarıya a&amp;ccedil;ıyoruz. &amp;lt;system.serviceModel&amp;gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;services&amp;gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service&amp;nbsp;name="MathServiceLib.MathServ</itunes:summary><itunes:keywords>Async, C#, C# 5.0, WCF</itunes:keywords><feedburner:origLink>http://www.ilkayilknur.com/post.aspx?id=a191ab11-d51a-450a-94ba-fd7f49dc0837</feedburner:origLink></item>
  <media:rating>nonadult</media:rating></channel>
</rss>

