Nyelvi aszinkronitás Windows Phone-on

Ne blogolj éjjel! Rögtön miután közzétettem a tegnapi bejegyzést, leesett, hogy eredetileg nem csak a Taskokig akartam bemutatni a UI tehermentesítését, hanem továbbmenni egy lépéssel, és megmutatni, hogy hogyan lehet WP7 alatt a C# 5.0-ban megjelent nyelvi aszinkronitást felhasználni.

A dolog annyira nem bonyolult, tulajdonképpen csak még egy NuGetelés kell hozzá. Az “asyncet tartalmazó” csomag működésének előkövetelménye az előző bejegyzésben használt BCL Portability csomag, de ezt a package manager – a csillagok megfelelő együttállása esetén – automatikusan telepíti, tehát nekünk nem kell külön foglalkoznunk vele. (Ahogy egyébként a BCL Portability-vel együtt települt a BCL Build is.)

A telepítendő csomag Id-ja Microsoft.Bcl.Async, amit talán könnyebb megjegyezni, mint a nevét, ami “Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 and 8”. Nem aprózták el, na.

wp7tasks-3

A csomag telepítése után a fordító már érteni fogja, mit is akarunk mondani azzal, hogy async egy metódus, illetve, hogy awaitet írunk egy metódushívás elé. A korábbi kódot az alábbira módosíthatjuk (a GetNumberAsync csak a teljesség kedvéért szerepel itt, nem változik):

async void Button_Click(object sender, RoutedEventArgs e)
{
    tbkStatus.Text = "Indítás...";
    var result = await GetNumberAsync();
    tbkStatus.Text = "Eredmény: " + result;
}

Task<int> GetNumberAsync()
{
    return Task<int>.Factory.StartNew(() =>
    {
        Thread.Sleep(3000);
        return new Random().Next(1, 10);
    });
}

Ahogy látható, a Button_Clicket megjelöltük az async módosítóval. Ennek következtében a GetNumberAsync meghívásakor nem kell azzal törődnünk, hogy Task<int>-et ad vissza. Az await kulcsszóval jelezzük, hogy minket a Task eredménye érdekel (a result típusa int lesz), és a következő utasításban már fel is használhatjuk.

Nem mellesleg pedig a Dispatcher-hívást is elfelejthetjük, mert a GetNumberAsync hívása utáni utasítások automatikusan a UI-szálra térnek vissza.

Szinkronnak kinéző, de aszinkron módon futó kód – Windows Phone alatt is!

Itt elérhető egy korábbi cikkem, amiben bővebben, de azért tömören kifejtem az async/await lényegét.

Itt pedig infó a Windows 8 fejlesztési könyvről, amelyben egy fejezet ezzel a témával foglalkozik.

Reklámok

~ Szerző: Fülöp Dávid - 2013. augusztus 11..

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

 
%d blogger ezt kedveli: