Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um agente assíncrono (ou apenas agente) é um componente de aplicativo que funciona de forma assíncrona com outros agentes para resolver tarefas de computação maiores. Pense em um agente como uma tarefa que tem um ciclo de vida definido. 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ções nesses dados à medida que ficam disponíveis. O primeiro agente usa a passagem de mensagens para informar o segundo agente de que mais dados estão disponíveis. O agendador de tarefas do Concurrency Runtime proporciona um mecanismo eficiente para permitir que os agentes bloqueiem e cedam cooperativamente, sem exigir preempção menos eficiente.
A Biblioteca de Agentes define a classe concurrency::agent para representar um agente assíncrono.
agent é uma classe abstrata que declara o método virtual concorrência::agent::run. O run método executa a tarefa que é executada pelo agente. Como run é abstrato, você deve implementar esse método em todas as classes derivadas do agent.
Ciclo de vida do agente
Os agentes têm um ciclo de vida definido. A enumeração concurrency::agent_status define os vários estados de um agente. A ilustração a seguir é um diagrama de estado que mostra como os agentes progridem de um estado para outro. Nesta ilustração, as linhas sólidas representam métodos que o seu aplicativo chama; as linhas pontilhadas representam métodos que são chamados a partir do ambiente de execução.
A tabela a seguir descreve cada estado na agent_status enumeração.
| Estado do agente | Descrição |
|---|---|
agent_created |
O agente não foi agendado para execução. |
agent_runnable |
O sistema de runtime está agendando o agente para execução. |
agent_started |
O agente foi iniciado e está em execução. |
agent_done |
O agente terminou. |
agent_canceled |
O agente foi cancelado antes de entrar no estado started. |
agent_createdé o estado inicial de um agente, agent_runnable e agent_started são os estados ativos, e agent_doneagent_canceled são os estados terminais.
Use o método concurrency::agent::status para recuperar o estado atual de um agent objeto. Embora o status método seja seguro para simultaneidade, o estado do agente pode mudar no momento em que o status método retorna. Por exemplo, um agente pode estar no estado agent_started quando se chama o método status, mas ser movido para o estado agent_done logo após o método status retornar.
Métodos e Características
A tabela a seguir mostra alguns dos métodos importantes que pertencem à agent classe. Para obter mais informações sobre todos os agent métodos de classe, consulte Classe do agente.
| Método | Descrição |
|---|---|
| começar | Programa o agent objeto para execução e o define para o agent_runnable estado. |
| executar | Executa a tarefa a ser executada pelo objeto agent. |
| feito | Move um agente para o agent_done estado. |
| cancelar | Se o agente não foi iniciado, esse método cancela a execução do agente e o define para o agent_canceled estado. |
| Situação | Recupera o estado atual do agent objeto. |
| aguarde | Aguarda que o objeto agent entre no estado agent_done ou agent_canceled. |
| wait_for_all | Aguarda que todos os objetos fornecidos agent entrem no estado agent_done ou no estado agent_canceled. |
| espera_por_um | Aguarda que pelo menos um dos objetos fornecidos agent entre no estado agent_done ou agent_canceled. |
Depois de criar um objeto de agente, chame o método concurrency::agent::start para programá-lo para execução. O sistema de execução chama o método run depois de agendar o agente e defini-lo para o estado agent_runnable.
O tempo de execução não gerencia exceções lançadas por agentes assíncronos. Para obter mais informações sobre manipulação de exceções e agentes, consulte Tratamento de exceções.
Exemplo
Para obter um exemplo que mostra como criar um aplicativo básico baseado em agente, consulte Passo a passo: Criando um aplicativo Agent-Based.