Async & Await in Windows Phone

Aplikasi Windows Phone 8.1 adalah aplikasi dengan antarmuka yang full screen, modern dan responsif. Nilai responsif dicapai dengan memindahkan eksekusi kode sebanyak mungkin diluar UIThread, sehingga setiap waktu UIThread dapat fokus untuk menerima masukan dari pengguna. Windows Phone Runtime mempermudah pemrogram untuk melakukan ini dengan menyediakan banyak API yang asinkronus dan juga memperkenalkan dua operator baru yaitu await dan async yang dapat kita gunakan untuk membuat fungsi-fungsi menjadi asinkronus. Pemrograman asinkronus mulai dikenalkan pada Windows Phone 8.0 dan semakin luas digunakan pada versi 8.1

Sebagai pemrogram, kita pun wajib untuk cermat melihat di bagian mana saja kode bisa dibangun dengan gaya asinkronus ini. Dengan pemrograman asinkronus maka aplikasi tidak perlu selalu menunggu operasi yang mungkin memakan waktu lama dan tetap membiarkan antarmuka responsif dan dapat menerima masukan dari pengguna. Untuk fungsi yang asinkronus, secara konvensi dinamakan dengan kata kerja dan diakhiri dengan kata “Async”. Hal ini berlaku untuk berbagai fungsi di dalam API Windows Phone Runtime dan kepada pemrogram juga disarankan untuk mengikuti konvensi ini jika membangun fungsi asinkronus di dalam aplikasi. Setiap fungsi yang hendak dipanggil secara asinkronus , ditandai dengan operator async dan ketika fungsi tersebut dipanggil diberikan operator await.

Untuk memahami penggunaan kedua operator baru tersebut mari kita membuat sebuah program sederhana yang mengimplementasikan mekanisme asinkronus. Silahkan ikuti langkah-langkah dibawah ini :

1. Jalankan Visual Studio 2013 Anda (selanjutnya disebut Visual Studio)

2. Pilih File > New Project. Kotak New Project akan muncul. Panel disebelah kiri akan menyediakan pilihan template yang dapat digunakan. Pada panel kiri, klik Installed sehingga akan menampilkan Visual Basic atau Visual C# dan pilih Store Apps, lalu pilih Windows Phone Apps.

3. Buatlah sebuah proyek Windows Phone Apps dengan template Pivot App baru dan beri nama Program_Async.

image

4. Modifikasi berkas XAML PivotPage.xaml. Temukan kontrol ListView dan buat modifikasi seperti berikut ini :


                    
                        
                            
                                
                                
                            
                        
                    
                

5. Buka berkas PivotPage.xaml.cs dan buatlah sebuah fungsi bernama GetTitleFeedAsync. Potongan kode ini akan mengambil sejumlah judul feed dari sebuah website. Karena kembalian dari fungsi ini adalah string dan kita mengingikan fungsi ini dieksekusi secara asinkronus maka kita tambahkan operator Async.

private async Task GetTitleFeedAsync()
        {
         Windows.Web.Syndication.SyndicationClient client = new SyndicationClient();

            // Force the SyndicationClient to download the information.
            client.BypassCacheOnRetrieve = true;

            Uri feedUri
                = new Uri("http://windowsteamblog.com/windows/b/windowsexperience/atom.aspx");
            String result = String.Empty;
            try
            {
                // Call SyndicationClient RetrieveFeedAsync to download the list of blog posts.
                SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri);

                // The rest of this method executes after await RetrieveFeedAsync completes.
                ListViewFeed.ItemsSource = feed.Items;

            }
            catch (Exception ex)
            {
                // Log Error.
                result =
                    "I'm sorry, but I couldn't load the page," +
                    " possibly due to network problems." +
                    "Here's the error message I received: "
                    + ex.ToString();
            }

        }

Operator await

Perhatikan baris SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri) menggunakan operator await untuk memanggil fungsi asinkronus RetrieveFeedAsync. Bandingkan jika menggunakan blok kode sinkronus misalnya RetrieveFeed ,sehingga kode kita menjadi SyndicationFeed feed = client.RetrieveFeed(feedUri) dibandingkan blok kode yang ditulis sebelumnya. Eksekusi aplikasi akan berhenti hingga RetrieveFeed selesai dieksekusi dan selama aplikasi berhenti maka aplikasi tidak dapat memberikan respon terhadap event yang lain. Penggunaan operator await membuat blok kode tidak terlihat begitu berbeda dengan eksekusi kode sinkronus namun compiler secara otomatis mengeksekusi kode tersebut secara asinkronus.

6. Fungsi GetFeedAsync kita panggil di dalam fungsi LoadState. LoadState merupakan fungsi standar bawaan dari template. Fungsi ini akan dipanggil setiap kali halaman PivotPage.xaml dituju.

private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // TODO: Create an appropriate data model for your problem domain to replace the sample data
           // var sampleDataGroup = await SampleDataSource.GetGroupAsync("Group-1");
           // this.DefaultViewModel[FirstGroupName] = sampleDataGroup;

            await GetFeedAsync();

        }

Tekan F5 dan perhatikan hasilnya.

image

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s