Agentes assíncronos
Um agente assíncrona (ou simplesmente agente) é um componente de aplicativo que funciona de modo assíncrono com outros agentes para solucionar os maiores tarefas de computação. Imagine 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, por exemplo, o teclado, um arquivo no disco ou uma conexão de rede) e outro agente podem executar uma ação em que os dados assim que estiver disponível. O primeiro agente usa a passagem de mensagem para informar que o agente de segundo há mais dados disponíveis. O Agendador de tarefas do Runtime de simultaneidade fornece um mecanismo eficiente para habilitar os agentes bloquear e produzir cooperativamente sem a necessidade de preempção menos eficiente.
A biblioteca de agentes define o Concurrency::agent classe para representar um agente assíncrono. agenté uma classe abstrata que declara o método virtual Concurrency::agent::run. O run método executa a tarefa que é executada pelo agente. Porque run é abstrato, você deve implementar esse método em cada classe que você derivar de agent.
Ciclo de vida do agente
Agentes têm um ciclo de vida definido. O Concurrency::agent_status enumeração define os vários estados de um agente. A ilustração a seguir é um diagrama de estado que mostra como agentes de progresso de um estado para outro. Nesta ilustração, linhas sólidas representam os métodos que chamam o seu aplicativo; linhas pontilhadas representam os métodos que são chamados de tempo de execução.
A tabela a seguir descreve cada estado do agent_status enumeração.
Estado de agente |
Descrição |
---|---|
agent_created |
O agente não foi agendado para execução. |
agent_runnable |
O tempo de execução está agendando o agente para execução. |
agent_started |
O agente foi iniciado e está sendo executado. |
agent_done |
O agente foi concluído. |
agent_canceled |
O agente foi cancelado antes de ele inserido o started estado. |
agent_createdo estado inicial de um agente, agent_runnable e agent_started são os estados ativos, e agent_done e agent_canceled são estados de terminal.
Use o Concurrency::agent::status método para recuperar o estado atual de um agent objeto. Embora o status método é seguro de simultaneidade, o estado do agente pode alterar o tempo de status método retorna. Por exemplo, um agente pode estar na agent_started estado quando você chamar o status método, mas é movido para o agent_done estado logo após o status método retorna.
Métodos e recursos
A tabela a seguir mostra alguns dos métodos importantes que pertencem a agent classe. Para obter mais informações sobre todas as agent métodos de classe, consulte Classe do agente.
Método |
Descrição |
---|---|
Agendas de agent objeto para execução e o configura para o agent_runnable estado. |
|
Executa a tarefa que deve ser realizado pela agent objeto. |
|
Move um agente para o agent_done estado. |
|
Se o agente não foi iniciado, esse método cancela a execução do agente e o configura para o agent_canceled estado. |
|
Recupera o estado atual do agent objeto. |
|
Aguarda o agent o objeto para inserir o agent_done ou agent_canceled estado. |
|
Aguarda todas agent objetos para inserir o agent_done ou agent_canceled estado. |
|
Espera pelo menos um dos fornecida agent objetos para inserir o agent_done ou agent_canceled estado. |
Depois de criar um objeto do agente, chamar o Concurrency::agent::start método para agendá-lo para execução. As chamadas de tempo de execução de run método após o agente de agenda e define como o agent_runnable estado.
O runtime não gerenciar exceções lançadas por agentes assíncronos. Para obter mais informações sobre a manipulação de exceção e agentes, consulte O Runtime de simultaneidade de manipulação de exceção.
Exemplo
Para obter um exemplo que mostra como criar um aplicativo básico de baseado em agente, consulte Demonstra Passo a passo: Criando um aplicativo baseado em agente.