Bagikan melalui


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.

Diagram Status Agen.

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.

Lihat juga

Pustaka Agen Asinkron