Sebuah operasi asynchronous dieksekusi di dalam thread yang terpisah dari thread aplikasi utama. Ketika aplikasi memanggil sebuah method atau fungsi untuk melakukan operasi secara asynchronous, aplikasi bisa melanjutkan eksekusinya sementara method asynchronous menjalankan tugasnya sehingga terdapat dua atau lebih eksekusi baris kode secara bersamaan.
Contoh
Mari kita ambil sebuah contoh untuk memahami konsep ini. Di sini, program menerima masukan pengguna menggunakan library IO.
import 'dart:io';
void main() {
print("Masukkan namamu :");
// minta input dari user
String name = stdin.readLineSync();
// ini adalah method async yang akan membaca input user
print("Halo ${name}");
print("Akhir dari main");
}
Fungsi readLineSync() bersifat synchronous dan berarti eksekusi semua instruksi setelah pemanggilan fungsi readLineSync() akan diblokir sampai metode readLineSync() selesai dieksekusi. Ini adalah karena fungsi readLineSync() menunggu input dari pengguna sehingga fungsi berhenti pada jalurnya dan tidak melanjutkan eksekusi sampai menerima input dari pengguna.
Contoh di atas akan menghasilkan output berikut :
Masukkan namamu :
Umar
Halo Umar
Akhir dari main
Dalam komputasi, kita mengatakan sesuatu bersifat synchronous ketika menunggu suatu peristiwa terjadi sebelum melanjutkan. Kelemahan pendekatan ini adalah jika bagian kode membutuhkan waktu terlalu lama untuk dieksekusi, blok selanjutnya, meskipun tidak terkait, akan terblokir dari dieksekusi. Sebagai contoh, pertimbangkan server web yang harus merespons permintaan dari beberapa pengguna sehingga server web harus memenuhi permintaan pengguna satu per satu dan akan memakan waktu yang lama.
Model eksekusi synchronous akan menghalangi setiap permintaan pengguna lainnya sampai selesai memproses permintaan saat ini. Dalam kasus seperti itu, seperti pada server web, setiap permintaan harus independen satu sama lain. Ini berarti, server web tidak boleh menunggu permintaan saat ini selesai dieksekusi sebelum merespons permintaan dari pengguna lain.
Secara sederhana, server web harus menerima permintaan dari pengguna baru sebelum menyelesaikan permintaan dari pengguna sebelumnya. Ini disebut sebagai konsep asynchronous . Pemrograman asynchronous pada dasarnya berarti tanpa menunggu atau model pemrograman non-blocking. Paket dart:async memudahkan implementasi blok pemrograman asynchronous dengan menggunakan bahasa pemrograman Dart.
Contoh
Contoh berikut akan menggambarkan fungsi blok asynchronous.
Langkah 1 − Buat file contact.txt seperti yang diberikan di bawah ini dan simpan di dalam folder data di proyek saat ini.
1, Tom
2, John
3, Tim
4, Jane
Langkah 2 – Tuliskan sebuah program yang akan membaca file tanpa menghalangi bagian lain dari aplikasi.
import "dart:async";
import "dart:io";
void main(){
File file = new File( Directory.current.path+"\\data\\contact.txt");
Future f = file.readAsString();
// mengembalikan future, ini adalah method Async
f.then((data)=>print(data));
// ini dicetak terlebih dahulu, menunjukkan fileReading tidak memblokir atau async
print("Akhir dari main");
}
Hasil dari program ini akan seperti berikut
Akhir dari main
1, Tom
2, John
3, Tim
4, Jane
Baris kode yang mencetak “Akhir dari main” tetap dilanjutkan dieksekusi sementara eksekusi membaca file tetap dilanjutkan secara paralel. Object dari Class Future, bagian dari dart:async, digunakan untuk mendapatkan hasil fungsi readAsString() yang dieksekusi secara asynchronous. Nilai Future ini kemudian digunakan untuk melakukan sesuatu setelah komputasi selesai. Setelah operasi pembacaan selesai, kontrol eksekusi dialihkan ke dalam blok then().
Dart Future
Dalam bahasa pemrograman Dart, Object Future didefinisikan sebagai cara untuk mendapatkan nilai suatu operasi secara paralel. Object Future adalah mekanisme untuk mewakili nilai yang dikembalikan oleh expression yang akan dikerjakan secara paralel dengan eksekusi expression lainnya. Beberapa class bawaan Dart mengembalikan Future ketika metode asynchronous dipanggil. Operasi asynchronous memungkinkan suatu baris kode dalam program Anda berjalan tanpa diblokir oleh baris kode yang lain.
Tutorial sebelumnya : Mengelola Library Pada Dart
Tutorial setelahnya : Dart Concurrency
Semua Tutorial Dart : Tutorial Dart