Pemrograman Asynchronous digunakan pada kebutuhan yang terikat Input/ Output seperti:
- Meminta data dari jaringan
- Mengakses database
- Membaca dan menulis ke sistem file.
C# memiliki model pemrograman asynchronous yang memungkinkan penulisan kode asinkron dengan mudah tanpa harus membuat callback atau menyesuaikan dengan library yang mendukung asinkron yang dikenal sebagai Task-based asynchronous pattern (TAP).
Pemrograman asynchronous sangat penting untuk aktivitas yang berpotensi memblokir, seperti akses web. Akses ke sumber daya web terkadang lambat atau tertunda.
Jika aktivitas tersebut diblokir dalam proses sinkron, seluruh aplikasi harus menunggu.
Pada proses asynchronous, aplikasi dapat melanjutkan pekerjaan lain yang tidak bergantung pada resource aplikasi atau web hingga task yang berpotensi memblokir selesai.
Semua aktivitas terkait UI biasanya berbagi satu thread. Jika ada proses yang diblokir dalam aplikasi sinkron, maka semuanya diblokir.
Aplikasi berhenti merespons, dan mungkin menyimpulkan bahwa aplikasi gagal padahal hanya menunggu.
Saat menggunakan metode asynchronous, aplikasi terus memberikan respon kepada UI sehingga user dapat mengubah ukuran atau meminimalkan window atau dapat menutup aplikasi jika tidak ingin menunggu hingga selesai.
Sebaliknya dengan menggunakan metode sinkron, jika aplikasi belum memiliki respon user tidak dapat ber interaksi dengan aplikasi, tidak dapat menggeser window, mengubah ukuran window sampai aplikasi selesai memiliki respon.
Metode async C# mudah dalam penulisan
Kata kunci async dan await di C# adalah inti dari pemrograman async. Dengan menggunakan kedua kata kunci tersebut sudah dapat menggunakan resource di .NET Framework, .NET Core, atau Windows Runtime untuk membuat metode asynchronous hampir semudah membuat metode sinkron.
Multithreading adalah teknik di mana prosesor (CPU) menggunakan banyak threads untuk menjalankan banyak proses secara bersamaan sehingga memungkinkan program untuk melakukan banyak task secara bersamaan, membuat program lebih efisien dan responsif.
Multi-threading adalah proses yang berisi banyak thread dalam satu proses. Setiap thread melakukan task yang berbeda, sehingga dapat menghindari antrian eksekusi kode dari baris kode yang ber urutan.
Multithreading memungkinkan setiap metode berjalan di thread terpisah. Jadi keuntungan utama dari multithreading adalah mengeksekusi banyak tugas secara bersamaan.
Penggunaan multithreading ini biasanya sangat efektif digunakan untuk eksekusi kode dari sebuah algoritma yang tidak perlu menunggu result untuk task-task selanjutnya. Misalnya dalam hal proses antrian proses data yang sangat besar.
Pada satu pemrosesan task yang berpotensi memiliki latency yang membutuhkan waktu tunggu, maka solusi menciptakan thread baru menjadikan setiap task dapat berjalan secara independen diwaktu yang sama.
Penggunaan multithreading biasanya digunakan untuk memaksimalkan prosesor multi-core agar banyak worker bekerja secara independen.
Dalam C#, namespace System.Threading berisi banyak kelas dan Interface untuk mencapai multithreading pada sebuah aplikasi.
Untuk mempelajari lebih lanjut tentang cara menjalankan kode new thread.
Pemrograman Asynchronous vs Multithreading
Kesalahpahaman umum yang terjadi dalam kasus penggunaannya adalah ketika pemrograman Asynchronous dan multithreading dianggap sama.
Pemrograman asynchronous adalah urutan Tugas (Task) yang tidak sinkron, sedangkan multithreading adalah tentang banyak thread yang berjalan secara paralel.
Berikut ini adalah contoh kode C# untuk membandingkan cara kerja antara pemrograman Asynchronous dan Multithreading, dengan proses yang sama dan jumlah eksekusi kode yang sama sebagai berikut:
Asynchronous Vs. Multithreading C# |
Misalnya digunakan untuk menangani eksekusi pemrosesan data untuk dikirim ke database dalam jumlah yang sangat besar, maka untuk memecah setiap antrian eksekusi menjadi thread baru, sehingga menghindari antrian (blocker) eksekusi dan setiap thread baru berjalan secara bersamaan.
Baca juga: Perbedaan antara Proses dan Thread.
Referensi:
- https://learn.microsoft.com..., Asynchronous programming.
- https://learn.microsoft.com/task-async.., Task asynchronous programming model.