• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Windows Runtime Componentlerinde Asenkron Islemler - C# 5.0

Windows Runtime Componentlerinde Asenkron Islemler - C# 5.0

12.01.2013

Yazar: İlkay İlknur (Google+)

Kategori: C#.Net

5708

Bir onceki yazimizda Windows Runtime Componentlerini inceledikten sonra simdi sira geldi WinRT Component’leri gelistirme sirasinda karsimiza siklikla cikabilecek olan bir durumu incelemeye. :) Bildigimiz gibi Windows 8 ile beraber gelen WinRT altyapisi icerisinde bulunan pek cok yapi asenkron sekilde calismak uzere tasarlandi. Hatta bu asenkron altyapiyi kullanmayi kolaylastirmak icin de C# 5.0 ile beraber gelen asenkron programlama yeniliklerini kullanmaktayiz.

Hal boyle olunca Windows Runtime Componentleri icerisinde de asenkron olarak calisacak yapilar gelistirmek artik neredeyse kacinilmaz bir hal aldi. Bu yazimizin konusu da Windows Runtime Componentleri icerisinde asenkron sekilde calisacak yapilari nasil gelistirecegimiz ile ilgili.

.NET Framework icerisinde asenkron islem diyince artik bir cirpida aklimiza gelen tip Task tipi olmakta. Onceki yazilarimizdan da hatirlayacagimiz uzere asenkron islemlerin yonetimini Task tipi uzerinden kolaylikla yapabiliyoruz. Peki Windows Runtime Component‘i gelistirme tarafina gectigimizde Task tipi hala daha orada mi yoksa karsimiza baska seyler mi cikiyor hemen durumu bir ornek yaparak inceleyelim.

Ornek olarak basit bir sekilde bir RSS adresinden ilgili contenti asenkron olarak download eden bir metot yazacagiz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Windows.Foundation;

namespace AsyncWinRTComponent
{
    public sealed class AsyncHelper
    {
        public async static Task<string> DownloadRSSAsync()
        {
            HttpClient client = new HttpClient();

            var result = await client.GetAsync("http://www.ilkayilknur.com/feed");

            return await result.Content.ReadAsStringAsync();
        }
    }
}

Koda baktigimizda artik alistigimiz asenkron implementasyonlardan hic bir farki yokmus gibi gorunuyor :) Oyleyse kodu derleyelim bakalim herhangi bir sorunla karsilasacak miyiz :)

Error 1 Method ‘AsyncWinRTComponent.AsyncHelper.DownloadRSSAsync()’ has a parameter of type ‘System.Threading.Tasks.Task<System.String>’ in its signature. Although this generic type is not a valid Windows Runtime type, the type or its generic parameters implement interfaces that are valid Windows Runtime types. Consider changing the type ‘Task’ in the method signature to one of the following types instead: Windows.Foundation.IAsyncAction, Windows.Foundation.IAsyncOperation, or one of the other Windows Runtime async interfaces. The standard .NET awaiter pattern also applies when consuming Windows Runtime async interfaces. Please see System.Runtime.InteropServices.WindowsRuntime.AsyncInfo for more information about converting managed task objects to Windows Runtime async interfaces. C:\Users\ilkayilknur\AppData\Local\Temporary Projects\AsyncWinRTComponent\Class1.cs 39 42 AsyncWinRTComponent

Upps :) Bu hatanin artik ne demek oldugunu biliyoruz bir onceki yazimizdan. Bu demek oluyor ki Task tipi WinRT tarafinda bulunan bir tip degil. Sadece .NET Framework tarafinda bulunuyor ve asenkron olarak gelistirdigimiz  public metotlardan Task tipini donemiyoruz. Peki ne yapacagiz ?

IAsyncAction ve IAsyncOperation<T> Interfaceleri

Windows Runtime tarafinda asenkron islemler dedigimizde de karsimiza Task tipi yerine IAsyncAction ve IAsyncOperation<T> interfaceleri cikiyor. IAsyncAction interface’i herhangi bir deger dondurmeyen asenkron islemlerin yonetiminde kullanilirken IAsyncOperation<T> interface’i de asenkron islem sonucu bir deger donulen metotlarda kullanilmakta. Ayni zamanda IAsyncAction interface’i icerisinde yaptiginiz asenkron cagri ile ilgili olarak progress bilgisini de almamiz mumkun degil.

Simdi yapmis oldugumuz ornegimize donersek asenkron metodumuz icerisinde islem sonlandiktan sonra bir deger dondurdugumuz icin IAsyncOperation<T> interface’ini kullanmamiz gerekmekte. Peki kullanimi nasil gerceklestirecegiz ? Burada en onemli konu bu. Cunku metodumuzu async modifier’i ile tanimladik. Ancak metottan Task tipi donemiyoruz ve Windows Runtime Component’i icerisinden de metodu disari acmamiz icin de Task tipi yerine IAsyncOperation<T> donmemiz gerekmekte. Yani isler oldukca karisik. :D

Simdi ilk olarak parca parca ilerleyelim ve yazmis oldugumuz metodu public yerine private olarak tanimlayalim ve metodu Windows Runtime Component’i icerisinde calisacak olan bir ic metot olarak dusunelim.

private async static Task<string> DownloadRSSAsyncInternal()
{
    HttpClient client = new HttpClient();

    var result = await client.GetAsync("http://www.ilkayilknur.com/feed");

    return await result.Content.ReadAsStringAsync();
}

Evet simdi Windows Runtime Component’imiz basarili bir sekilde derlenebiliyor cunku Task tipini dondugumuz metodumuzu private olarak tanimladik. (Metot isminin sonuna Internal kelimesini de yerlestirdik ki disari actigimiz metotta yine DownloadRSSAsync ismini kullanabilelim ;) )

Simdi DownloadAsyncRSS isimli metodumuzu IAsyncOperation<T> donecek sekilde tanimlayalim ve esas onemli kisma gelelim.

public static IAsyncOperation DownloadRSSAsync()
{

}

Bu yazdigimiz metot icerisinde de aslinda elimizdeki bulunan DownloadRSSAsyncInternal isimli metottan donen Task tipini IAsyncOperation<T> interface’ine cevirebilirsek isimizi bitirebiliriz gibi gorunuyor ne dersiniz ? Acaba elimizde bulunan bir Task tipini IAsyncOperation<T>‘a cevirebilecek bir yapi var midir bakalim.

Iste aradigimiz tam da boyle birsey :) Windows Runtime icerisindeki yapilara baktigimizda icerisinde .NET Framework tipleri ve WinRT tipleri arasinda hizli gecisler yapabilecegimiz pek cok extension metot mevcut. Bu cercevede elimizde bulunan Task tipinden de IAsyncOperation<T> uretmek icin de AsAsyncOperation isimli bir metot WinRT icerisinde bulunmakta. Ayni sekilde elimizde bulunan Task tipinden IAsyncAction uretmemiz de mumkun. Oyleyse yazacagimiz Windows Runtime Component’in son hali su sekilde olacak.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Windows.Foundation;

namespace AsyncWinRTComponent
{
    public sealed class AsyncHelper
    {
        private async static Task<string> DownloadRSSAsyncInternal()
        {
            HttpClient client = new HttpClient();

            var result = await client.GetAsync("http://www.ilkayilknur.com/feed");

            return await result.Content.ReadAsStringAsync();
        }

        public static IAsyncOperation<string> DownloadRSSAsync()
        {
            return DownloadRSSAsyncInternal().AsAsyncOperation();
        }
    }
}

Gordugunuz gibi Windows Runtime Componentleri icerisinde asenkron metotlar yazip disari acmak da oldukca kolay. Ozellikle .NET Framework ile WinRT tipleri arasindaki gecisleri yapmak gordugunuz gibi extension metotlarla oldukca kolaylasmis durumda. Bu extension metotlar sadece asenkron programlamada kullandigimiz tipler icin degil ayni zamanda Streamler gibi yapilarda da islerimizi oldukca kolaylastirmakta. Tavsiyem eger WinRT tarafinda bir tipte sikisip kaldiysaniz ve bir islemi nasil yapacaginiza tam olarak emin degilseniz ve bu isi .NET Frameworkle hemen cozebileceginizi dusunuyorsaniz elinizdeki Windows Runtime tipini .NET Framework tipine ceviren bir extension metot olup olmadigini mutlaka arastirin ;)

Umarim faydali olmustur.

Hepinize kolay gelsin,

Not: Blogumu RSS veya sosyal sitelerden takip etmekte sikinti cekenler icin blogumu mail ile de takip edebilirsiniz. Buradaki linke tiklayarak kaydinizi yapabilirsiniz.

Yazar Hakkında

İlkay İlknur

İlkay İlknur

www.ilkayilknur.com

2008 yılından itibaren yazılım geliştirme dünyasında yer alan İlkay İlknur şu ana kadar bankacılık uygulamaları ve müşterilere özel custom uygulamalar geliştirmiştir. Şu anda Amerika'da bulunan XOMNI firmasında Software Engineer olarak çalışmaktadır.Genel olarak blogunda C# ve XAML tabanlı platformlarla(Windows Phone,Windows 8,Silverlight) ilgili paylaşımlarda bulunmaktadır ve vakit buldukça üniversitelerde ve topluluk etkinliklerinde bu konular üzerinde oturumlar gerçekleştirmektedir. İlkay İlknur ayrıca Visual C# alanında MVP ünvanına sahiptir.

Sosyal Medya

ORANLAR

  • 5708izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 124174
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 71418
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51996
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ