Compartilhar via


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.

Diagrama de estados de agente

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

Iniciar

Agendas de agent objeto para execução e o configura para o agent_runnable estado.

executar

Executa a tarefa que deve ser realizado pela agent objeto.

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 configura para o agent_canceled estado.

status

Recupera o estado atual do agent objeto.

Aguarde

Aguarda o agent o objeto para inserir o agent_done ou agent_canceled estado.

wait_for_all

Aguarda todas agent objetos para inserir o agent_done ou agent_canceled estado.

wait_for_one

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.

Consulte também

Conceitos

Biblioteca de agentes assíncronos