Agen Asinkron
Agen asinkron (atau hanya agen) adalah komponen aplikasi yang bekerja secara asinkron dengan agen lain untuk menyelesaikan tugas komputasi yang lebih besar. Anggap agen sebagai tugas yang memiliki siklus hidup yang ditetapkan. Misalnya, satu agen mungkin membaca data dari perangkat input/output (seperti keyboard, file pada disk, atau koneksi jaringan) dan agen lain mungkin melakukan tindakan pada data tersebut saat tersedia. Agen pertama menggunakan pesan yang diteruskan untuk memberi tahu agen kedua bahwa lebih banyak data tersedia. Penjadwal tugas Concurrency Runtime menyediakan mekanisme yang efisien untuk memungkinkan agen memblokir dan menghasilkan secara kooperatif tanpa memerlukan pendahuluan yang kurang efisien.
Pustaka Agen mendefinisikan kelas konkurensi::agent untuk mewakili agen asinkron. agent
adalah kelas abstrak yang mendeklarasikan konkurensi metode virtual::agent::run. Metode ini run
menjalankan tugas yang dilakukan oleh agen. Karena run
abstrak, Anda harus menerapkan metode ini di setiap kelas yang Anda dapatkan dari agent
.
Siklus Hidup Agen
Agen memiliki siklus hidup yang ditetapkan. Enumerasi konkurensi::agent_status mendefinisikan berbagai status agen. Ilustrasi berikut adalah diagram status yang menunjukkan bagaimana agen maju dari satu status ke status lainnya. Dalam ilustrasi ini, garis solid mewakili metode yang Anda panggil dari aplikasi Anda; garis putus-putus mewakili metode yang dipanggil dari runtime.
Tabel berikut ini menjelaskan setiap status dalam agent_status
enumerasi.
Status Agen | Deskripsi |
---|---|
agent_created |
Agen belum dijadwalkan untuk dieksekusi. |
agent_runnable |
Runtime menjadwalkan agen untuk eksekusi. |
agent_started |
Agen telah dimulai dan sedang berjalan. |
agent_done |
Agen selesai. |
agent_canceled |
Agen dibatalkan sebelum memasuki status started . |
agent_created
adalah status awal agen, agent_runnable
dan agent_started
merupakan status aktif, dan agent_done
dan agent_canceled
merupakan status terminal.
Gunakan metode konkurensi::agent::status untuk mengambil status agent
objek saat ini. status
Meskipun metode ini aman konkurensi, status agen dapat berubah pada saat status
metode kembali. Misalnya, agen dapat berada dalam agent_started
status ketika Anda memanggil status
metode , tetapi pindah ke agent_done
status tepat setelah status
metode kembali.
Metode dan Fitur
Tabel berikut menunjukkan beberapa metode penting yang termasuk dalam agent
kelas . Untuk informasi selengkapnya tentang semua agent
metode kelas, lihat Kelas agen.
Metode | Deskripsi |
---|---|
mulai | Menjadwalkan agent objek untuk eksekusi dan mengaturnya ke status agent_runnable . |
jalankan | Menjalankan tugas yang akan dilakukan oleh agent objek. |
selesai | Memindahkan agen ke status agent_done . |
batalkan | Jika agen tidak dimulai, metode ini membatalkan eksekusi agen dan mengaturnya ke agent_canceled status. |
status | Mengambil status agent objek saat ini. |
Tunggu | agent Menunggu objek memasuki status agent_done atau agent_canceled . |
wait_for_all | Menunggu semua objek yang disediakan agent untuk memasuki status agent_done atau agent_canceled . |
wait_for_one | Menunggu setidaknya salah satu objek yang disediakan agent untuk memasuki status agent_done atau agent_canceled . |
Setelah Anda membuat objek agen, panggil metode konkurensi::agent::start untuk menjadwalkannya untuk eksekusi. Runtime memanggil run
metode setelah menjadwalkan agen dan mengaturnya ke status agent_runnable
.
Runtime tidak mengelola pengecualian yang dilemparkan oleh agen asinkron. Untuk informasi selengkapnya tentang penanganan pengecualian dan agen, lihat Penanganan Pengecualian.
Contoh
Untuk contoh yang menunjukkan cara membuat aplikasi berbasis agen dasar, lihat Panduan: Membuat Aplikasi Berbasis Agen.