Share via


Agents asynchrones

Un agent asynchrone (ou simplement un agent) est un composant d’application qui fonctionne de manière asynchrone avec d’autres agents pour résoudre des tâches informatiques plus volumineuses. Considérez un agent comme une tâche qui a un cycle de vie défini. Par exemple, un agent peut lire des données à partir d’un appareil d’entrée/sortie (par exemple, le clavier, un fichier sur disque ou une connexion réseau) et un autre agent peut effectuer une action sur ces données au fur et à mesure qu’il devient disponible. Le premier agent utilise le passage de messages pour informer le deuxième agent que d’autres données sont disponibles. Le planificateur de tâches concurrency Runtime fournit un mécanisme efficace pour permettre aux agents de bloquer et de produire de manière coopérative sans nécessiter de préemption moins efficace.

La bibliothèque agents définit la classe concurrency ::agent pour représenter un agent asynchrone. agent est une classe abstraite qui déclare la méthode virtuelle concurrency ::agent ::run. La run méthode exécute la tâche effectuée par l’agent. Étant donné qu’elle run est abstraite, vous devez implémenter cette méthode dans chaque classe à partir de laquelle agentvous dérivez .

Cycle de vie de l’agent

Les agents ont un cycle de vie défini. L’énumération concurrency ::agent_status définit les différents états d’un agent. L’illustration suivante est un diagramme d’état qui montre comment les agents progressent d’un état à un autre. Dans cette illustration, les lignes solides représentent les méthodes que vous appelez à partir de votre application ; Les lignes en pointillés représentent des méthodes appelées à partir du runtime.

Agent State Diagram.

Le tableau suivant décrit chaque état dans l’énumération agent_status .

État de l'agent Description
agent_created L’agent n’a pas été planifié pour l’exécution.
agent_runnable Le runtime planifie l’agent pour l’exécution.
agent_started L’agent a démarré et est en cours d’exécution.
agent_done L’agent a terminé.
agent_canceled L’agent a été annulé avant d’entrer dans l’état started .

agent_createdest l’état initial d’un agent, agent_runnable et agent_started les états actifs, et agent_canceledagent_done sont les états terminals.

Utilisez la méthode concurrency ::agent ::status pour récupérer l’état actuel d’un agent objet. Bien que la status méthode soit concurrency-safe, l’état de l’agent peut changer à l’heure de retour de la status méthode. Par exemple, un agent peut être dans l’état agent_started lorsque vous appelez la status méthode, mais déplacé vers l’état agent_done juste après le retour de la status méthode.

Méthodes et fonctionnalités

Le tableau suivant présente certaines des méthodes importantes qui appartiennent à la agent classe. Pour plus d’informations sur toutes les méthodes de agent classe, consultez classe d’agent.

Méthode Description
start Planifie l’objet agent pour l’exécution et le définit à l’état agent_runnable .
run Exécute la tâche à effectuer par l’objet agent .
done Déplace un agent vers l’état agent_done .
cancel Si l’agent n’a pas démarré, cette méthode annule l’exécution de l’agent et la définit à l’état agent_canceled .
statut Récupère l’état actuel de l’objet agent .
Attendre Attend que l’objet agent entre dans l’état ou agent_canceled l’étatagent_done.
wait_for_all Attend que tous les objets fournis agent entrent dans l’étatagent_done.agent_canceled
wait_for_one Attend qu’au moins un des objets fournis agent entre dans l’état ou agent_canceled l’étatagent_done.

Après avoir créé un objet agent, appelez la méthode concurrency ::agent ::start pour la planifier pour l’exécution. Le runtime appelle la run méthode une fois qu’elle planifie l’agent et la définit à l’état agent_runnable .

Le runtime ne gère pas les exceptions levées par des agents asynchrones. Pour plus d’informations sur la gestion des exceptions et les agents, consultez Gestion des exceptions.

Exemple

Pour obtenir un exemple montrant comment créer une application basée sur un agent de base, consultez Procédure pas à pas : Création d’une application basée sur un agent.

Voir aussi

Bibliothèque d’agents asynchrones