Compartilhar via


Agentes assíncronos

Um agente assíncrona (ou apenas o agente) é um componente de aplicativo que funciona de forma assíncrona com outros agentes para resolver tarefas de computação maiores. Pense de um agente como uma tarefa que tem um ciclo de vida ajustado. Por exemplo, um agente pode ler dados de um dispositivo de entrada/saída (como o teclado, um arquivo no disco, ou uma conexão de rede) e outro agente pode executar a ação nesses dados conforme se torna disponível. O primeiro agent usa a mensagem que transmite para informar o segundo agente que mais dados estão disponíveis. O agendador de tarefas de tempo de execução de simultaneidade fornece um mecanismo eficiente para habilitar agentes para bloquear cooperativa e gerar sem exigir menos preempção eficiente.

A biblioteca dos agentes define a classe de concurrency::agent para representar um agente assíncrona. agent é uma classe abstrata que declara o método virtual concurrency::agent::run. O método de run executa a tarefa que é executada pelo agent. Como run é abstrata, você deve implementar esse método em cada classe derivada de agent.

Ciclo de vida do agent

Os agentes têm um ciclo de vida ajustado. A enumeração de concurrency::agent_status define vários estados de um agente. A ilustração a seguir é um diagrama de estado que mostra como os agentes o andamento de um estado para outro. Nesta ilustração, as linhas sólidas representam os métodos que você chama do seu aplicativo; as linhas pontilhadas representam os métodos que são chamados de tempo de execução.

Diagrama de estado do agente

A tabela a seguir descreve cada estado da enumeração de agent_status .

Estado do agent

Descrição

agent_created

O agent não foi agendado para execução.

agent_runnable

O tempo de execução está programando o agente para a execução.

agent_started

O agente foi iniciado e está em execução.

agent_done

O agente concluído.

agent_canceled

O agente foi cancelado antes que entrou no estado de started .

agent_created é o estado inicial de um agente, agent_runnable e agent_started são os estados ativas, e agent_done e agent_canceled são os estados terminais.

Use o método de concurrency::agent::status para recuperar o estado atual de um objeto de agent . Embora o método de status é simultaneidade- seguro, o estado do agent pode ser alterado antes que o método de status retornar. Por exemplo, um agente pode estar no estado de agent_started quando você chama o método de status , mas movido para agent_done o estado imediatamente depois que o método de status retorna.

Métodos e recursos

A tabela a seguir mostra alguns dos métodos importantes que pertencem à classe de agent . Para obter mais informações sobre todos os métodos da classe de agent , consulte Classe agente.

Método

Descrição

início

Agenda do objeto agent para execução e defina-o com o estado de agent_runnable .

execução

Executa a tarefa que deve ser executada pelo objeto de agent .

feita

Move um agente com o estado de agent_done .

Cancelar

Se o agente não tiver sido iniciado, essa execução de cancelamentos do método do agent e conjuntos ao estado de agent_canceled .

status

Recupera o estado atual do objeto de agent .

espera

As esperas para agent objeto para entrar no estado de agent_done ou de agent_canceled .

wait_for_all

As esperas fornecidos para todas objetos de agent entrem no estado de agent_done ou de agent_canceled .

wait_for_one

Esperas no mínimo uma de objetos fornecidos de agent entrem no estado de agent_done ou de agent_canceled .

Depois de criar um objeto do agent, chame o método de concurrency::agent::start para agendar-lo para execução. O tempo de execução chama o método de run depois de agendamento do distribution agent e o define o estado de agent_runnable .

O tempo de execução não gerencia as exceções emitidas por agentes assíncronas. Para obter mais informações sobre a manipulação e os agentes de exceção, consulte Tratamento de exceções no tempo de execução de simultaneidade.

Exemplo

Para obter um exemplo que mostra como criar um aplicativo agente- baseado básico, considere Instruções passo a passo: criando um aplicativo com base no agente.

Consulte também

Conceitos

Biblioteca de Agentes Assíncronos