Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 memberikan pengendalian secara kooperatif tanpa memerlukan preempasi yang kurang efisien.
Pustaka Agen mendefinisikan kelas konkurensi::agent untuk mewakili agen asinkron.
agent adalah kelas abstrak yang mendeklarasikan metode virtual concurrency::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 tebal mewakili metode yang dipanggil 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 |
Waktu proses menjadwalkan agen sistem untuk pelaksanaan. |
agent_started |
Agen telah aktif dan 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. Meskipun metode status aman dari konkurensi, status agen dapat berubah ketika metode status mengembalikan hasilnya. Misalnya, agen dapat berada dalam keadaan agent_started ketika Anda memanggil metode status, tetapi pindah ke keadaan agent_done tepat setelah metode status 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 menyetelnya ke keadaan agent_canceled. |
| 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 memasuki keadaan agent_done atau agent_canceled. |
| tunggu_satu | Menunggu setidaknya salah satu agent objek yang disediakan untuk masuk ke 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 di Penanganan Pengecualian.
Contoh
Untuk contoh yang menunjukkan cara membuat aplikasi berbasis agen dasar, lihat Panduan: Membuat Aplikasi Berbasis Agen.