none
(Sumber: milist MUGI) Asynchronous di C# RRS feed

  • Pertanyaan

  • Mau nanya nih, apa sih keuntungan menggunakan Asynchronous Method ketimbang yang gak make? dan Bagaimana caranya misalnya kita memproses sesuatu yang lama prosesnya, misalnya menghitung huruf konsonan pada sebuah kalimat yang panjang, trus bisa tidak disaat proses menghitung tersebut kita jalankan proses yg lain tanpa terbebani oleh proses perhitungan huruf konsonan tsb?

     

    saya dah nyoba pake Async tapi kok gak ngefek ya?

    Misalnya codingnya seperti ini :

     

    ======================================================

    delegate int AsyncProsesHitung();       
    public int AsyncHitungVokal()
    {
                AsyncProsesHitung AsyncVokal = new AsyncProsesHitung(HitungVokal);
                IAsyncResult iar = AsyncVokal.BeginInvoke(null, null);

                while (!iar.IsCompleted)
                {
                       //Lakukan hal lain tanpa terpengaruh Proses diatas

                }
                int Hasil = AsyncVokal.EndInvoke(iar);
                return Hasil;
    }

    public int HitungVokal()
    {

                int  jmlVokal = 0;

                for (int i = 1; i <= this.Content.Characters.Count; i++)
                {
                    if (this.Content.Characters[i].Text.ToLower() == "a" ||
                        this.Content.Characters[i].Text.ToLower() == "i" ||
                        this.Content.Characters[i].Text.ToLower() == "u" ||
                        this.Content.Characters[i].Text.ToLower() == "e" ||
                        this.Content.Characters[i].Text.ToLower() == "o")
                    {
                        jmlVokal++;

                    }
                }
                return jmlVokal;
    }

    =============================================

    Gimana?


    Jumat, 22 Juli 2011 06.08
    Moderator

Jawaban

Semua Balasan

  • Bisa di posting apa isi dari:

     "//Lakukan hal lain tanpa terpengaruh Proses diatas" ?

     

    Jika dari class/UI/form lain anda hanya memanggil AsyncHitungVokal(), ngga akan ngefek, karena pooling pada loop while (!iar.IsCompleted) {...} akan menghabiskan waktu CPU anda selama "menghitung vokal" belum selesai.

    Sebagai contoh, coba ditambahkan System.Threading.Sleep(1) atau kalau GUI app, Application.DoEvents() didalam loop tersebut.

    Ini akan memberi kesempatan pada applikasi untuk mengerjakan hal lain pada timeslot tsb.

     

    Kalau ingin memaksimalkan async method, coba pakai callback yang akan dieksekusi apabila async method selesai mengerjakan tugasnya. Jadi anda ngga perlu pooling. Contohnya ada di:

    http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx

    Selain itu coba perdalam konsep Threading di C#, karena ini sangat erat kaitannya dengan multithreading.

    Mungkin bisa lihat2: http://www.albahari.com/threading/

     

    Dijawab oleh: Susila IP


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Jumat, 22 Juli 2011 06.09
    Moderator
  • Oke, thanks atas infonya, sebenarnya dah nyoba sih di application console dan mau jalan disana, tapi pas dicoba di form yang gak mau! Dulu pernah baca, kalau di UI kaya Form beda implementasinya biar bisa dijalankan sebagaimana mestinya, itu yang belum berhasil.

    Lakukan hal yang lain maksudnya misalnya menampilkan tulisan di texbox yang lain selain textbox buat menampilkan perhitungan huruf vokal.


    Jumat, 22 Juli 2011 06.10
    Moderator
  • Gunakan callback pattern. Secara umum konsepnya seperti ini :

    http://www.yulianmf.com/Asynchronous-processing-on-the-Command-object.aspx

     

    Dijawab oleh: Rully Yulian MF


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Jumat, 22 Juli 2011 06.10
    Moderator