Compartir a través de


Agentes asincrónicos

Un agente asincrónico (o, simplemente, un agente) es un componente de aplicación que funciona de forma asincrónica con otros agentes para resolver tareas de computación mayores. Imagínese que un agente es como una tarea que tiene un ciclo de vida establecido. Por ejemplo, un agente podría leer datos de un dispositivo de entrada y salida (como el teclado, un archivo en el disco o una conexión de red) y otro agente podría realizar acciones en esos datos a medida que esté disponible. El primer agente usa el paso de mensajes para informar al segundo agente de que hay más datos disponibles. El programador de tareas de Runtime de simultaneidad proporciona un mecanismo eficaz para permitir que los agentes bloqueen y produzcan cooperativamente sin necesidad de un adelantamiento menos eficaz.

La biblioteca de agentes define la clase concurrency::agent para representar un agente asincrónico. agent es una clase abstracta que declara el método virtual concurrency::agent::run. El método run ejecuta la tarea que realiza el agente. Dado que run es abstracto, debe implementar este método en cada clase que derive de agent.

Ciclo de vida del agente

Los agentes tienen un ciclo de vida establecido. La enumeración concurrency::agent_status define los distintos estados de un agente. La ilustración siguiente es un diagrama de estado que muestra cómo progresan los agentes de un estado a otro. En esta ilustración, las líneas sólidas representan métodos a los que llama desde la aplicación; las líneas de puntos representan métodos a los que se llama desde runtime.

Agent State Diagram.

En la tabla siguiente se describe cada estado de la enumeración agent_status.

Estado del agente Descripción
agent_created El agente no se ha programado para su ejecución.
agent_runnable El runtime está programando el agente para su ejecución.
agent_started El agente se ha iniciado y se está ejecutando.
agent_done El agente ha finalizado.
agent_canceled El agente se ha cancelado antes de que entrara en el estado started.

agent_created es el estado inicial de un agente, agent_runnable y agent_started son los estados activos y agent_done y agent_canceled son los estados terminales.

Use el método concurrency::agent::status para recuperar el estado actual de un objeto agent. Aunque el método status es seguro para la simultaneidad, el estado del agente puede cambiar en el momento en que el método status devuelve. Por ejemplo, un agente podría estar en el estado agent_started cuando se llama al método status, pero se movió al estado agent_done justo después de que el método status volviera.

Métodos y características

En la tabla siguiente, se muestran algunos de los métodos importantes que pertenecen a la clase agent. Para obtener información sobre todos los métodos de la clase agent, consulte la Clases de agente.

Método Descripción
start Programa el objeto agent para su ejecución y lo establece en el estado agent_runnable.
run Ejecuta la tarea que va a realizar el objeto agent.
done Mueve un agente al estado agent_done.
cancel Si el agente no se inició, este método cancela la ejecución del agente y lo establece en el estado agent_canceled.
status Recupera el estado actual del objeto agent.
wait Espera a que el objeto agent entre en el estado agent_done o agent_canceled.
wait_for_all Espera a que todos los objetos agent proporcionados entren en el estado agent_done o agent_canceled.
wait_for_one Espera a que al menos uno de los objetos agent proporcionados entre en el estado agent_done o agent_canceled.

Después de crear un objeto de agente, llame al método concurrency::agent::start para programarlo para su ejecución. El runtime llama al método run después de programar el agente y lo establece en el estado agent_runnable.

El runtime no controla las excepciones producidas por agentes asincrónicos. Para obtener más información sobre la gestión de excepciones y agentes, consulte Gestión de excepciones.

Ejemplo

Para ver un ejemplo que muestra cómo crear una aplicación básica basada en agente, consulte Tutorial: Creación de una aplicación basada en agente.

Consulte también

Biblioteca de agentes asincrónicos