Partilhar via


Agentes assíncronos

Um agente assíncrona (ou apenas agente) é um componente de aplicativo assincronamente funciona com outros agentes para solucionar 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 teclado, um arquivo em disco ou uma conexão de rede) e outro agente podem executar uma ação nos dados como ele se torna disponível.O primeiro agente usa passagem de mensagem para informar o segundo agente mais dados estão disponíveis.O Agendador de tarefas do Runtime de simultaneidade fornece um mecanismo eficiente para habilitar agentes bloquear e produzir cooperativa sem exigir 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 é executada pelo agente.Porque run é abstrato, você deve implementar esse método em todas as classes que derivam de agent.

Ciclo de vida do agente

Agentes têm um ciclo de vida definido.O concurrency::agent_status enumeração define vários estados de um agente.A ilustração a seguir é um diagrama de estado mostra como agentes de progresso de um estado para outro.Nesta ilustração, linhas sólidas representam métodos de chamada do aplicativo; linhas pontilhadas representam os métodos são chamados de tempo de execução.

Diagrama de estado do agente

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

Estado do 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 de execução.

agent_started

O agente foi iniciado e está executando.

agent_done

O agente foi concluída.

agent_canceled

O agente foi cancelado antes de inseri-lo a 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 ser no 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 métodos importantes que pertencem a agent classe.Para obter mais informações sobre todos os agent métodos de classe, consulte classe de agente.

Método

Descrição

início

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

executar

Executa a tarefa deve ser executada 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 define como 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 a agent_done ou agent_canceled estado.

wait_for_one

Espera pelo menos um dos fornecida agent objetos para inserir a agent_done ou agent_canceled estado.

Depois de criar um objeto do agente, chamar o concurrency::agent::start método agendá-lo para execução.O tempo de execução chama o run método após ele agenda o agente e o 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 manipulação de exceção e agentes, consulte Manipulação de exceção em tempo de execução de concorrência.

Exemplo

Para obter um exemplo que mostra como criar um aplicativo baseado em agente básico, consulte Passo a passo: Criando um aplicativo Baseado Agente-.

Consulte também

Conceitos

Biblioteca de agentes assíncrono