Agentes assíncronos
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 em disco ou uma conexão de rede) e outro agente pode executar uma ação nesses dados à medida que eles se tornam disponíveis. O primeiro agente usa mensagem Em aprovação para informar ao segundo agente que mais dados estão disponíveis. O agendador de tarefas Runtime de Simultaneidade fornece um mecanismo eficiente para permitir que os agentes bloqueiem e produzam cooperativamente sem exigir uma 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 concurrency::agent::run. O método run
executa a tarefa que é realizada pelo agente. Como run
é abstrato, você deve implementar esse método em cada classe que você deriva de 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 avançam progridem de um estado para outro. Nesta ilustração, linhas sólidas representam métodos que você chama de seu aplicativo; linhas pontilhadas representam métodos chamados do runtime.
A tabela a seguir descreve cada estado na enumeração agent_status
.
Estado do Agente | Descrição |
---|---|
agent_created |
O agente não foi agendado para execução. |
agent_runnable |
O runtime está agendando o agente para execução. |
agent_started |
O agente foi iniciado e está em execução. |
agent_done |
O agente foi concluído. |
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_done
e agent_canceled
são os estados terminais.
Use o método concurrency::agent::status para recuperar o estado atual de um objeto agent
. Embora o método status
seja seguro de simultaneidade, o estado do agente pode ser alterado quando o método status
retorna. Por exemplo, um agente pode estar no estado agent_started
quando você chamar o método status
, mas movido para o estado agent_done
logo após o retorno do método status
.
Métodos e Recursos
A tabela a seguir mostra alguns dos métodos importantes que pertencem à classe agent
. Para obter mais informações sobre todos os métodos de classe agent
, consulte Classe agent.
Método | Descrição |
---|---|
start | Agenda o objeto agent para execução e o define com o estado agent_runnable . |
run | Executa a tarefa a ser realizada pelo objeto agent . |
done | Muda um agente para o estado agent_done . |
cancel | Se o agente não tiver sido iniciado, esse método cancelará a execução do agente e o definirá com o estado agent_canceled . |
status | Recupera o estado atual do objeto agent . |
wait | Aguarda que o objeto agent insira o estado agent_done ou agent_canceled . |
wait_for_all | Aguarda que todos os objetos agent fornecidos insiram o estado agent_done ou agent_canceled . |
wait_for_one | Aguarda que pelo menos um dos objetos agent fornecidos insira o estado agent_done ou agent_canceled . |
Depois de criar um objeto de agente, chame o método concurrency::agent::start para agendá-lo para execução. O runtime chama o método run
depois que ele agenda o agente e o define com o estado agent_runnable
.
O runtime não gerencia exceções geradas por agentes assíncronos. Para mais informações sobre o tratamento de exceção, consulte Tratamento de exceção.
Exemplo
Para obter um exemplo que mostra como criar um aplicativo básico baseado em agente, consulte Passo a passo: Criando um aplicativo baseado em agente.