Condividi tramite


Agenti asincroni

Un agente asincrono (o solo agente) è un componente dell'applicazione che funziona in modo asincrono con altri agenti per risolvere attività di calcolo più grandi. Si consideri un agente come un'attività con un ciclo di vita impostato. Ad esempio, un agente potrebbe leggere i dati da un dispositivo di input/output (ad esempio la tastiera, un file su disco o una connessione di rete) e un altro agente potrebbe eseguire un'azione su tali dati non appena diventa disponibile. Il primo agente usa il passaggio di messaggi per informare il secondo agente che sono disponibili più dati. Il pianificatore di attività del Concurrency Runtime fornisce un meccanismo efficiente per consentire agli agenti di bloccare e sospendere in modo cooperativo senza richiedere una preemption meno efficiente.

La libreria agenti definisce la classe concurrency::agent per rappresentare un agente asincrono. agent è una classe astratta che dichiara il metodo virtuale concurrency::agent::run. Il run metodo esegue l'attività eseguita dall'agente. Poiché run è astratta, è necessario implementare questo metodo in ogni classe derivata da agent.

Ciclo di vita dell'agente

Gli agenti hanno un ciclo di vita impostato. L'enumerazione concurrency::agent_status definisce i vari stati di un agente. La figura seguente è un diagramma di stato che mostra come gli agenti progredisce da uno stato a un altro. In questa illustrazione le linee solide rappresentano i metodi che si chiamano dall'applicazione; le linee tratteggiate rappresentano i metodi chiamati dal runtime.

Diagramma dello stato dell'agente.

La tabella seguente descrive ogni stato nell'enumerazione agent_status .

Stato agente Descrizione
agent_created L'agente non è stato pianificato per l'esecuzione.
agent_runnable Il runtime pianifica l'esecuzione dell'agente.
agent_started L'agente è stato avviato ed è in esecuzione.
agent_done L'agente ha concluso.
agent_canceled L'agente è stato annullato prima che entrasse nello stato started.

agent_created è lo stato iniziale di un agente agent_runnable e agent_started sono gli stati attivi e agent_doneagent_canceled sono gli stati del terminale.

Usare il metodo concurrency::agent::status per recuperare lo stato corrente di un agent oggetto. Anche se il status metodo è sicuro dal punto di vista della concorrenza, lo stato dell'agente può cambiare al momento del ritorno del status metodo. Ad esempio, un agente potrebbe trovarsi nello agent_started stato quando si chiama il status metodo , ma spostato nello agent_done stato subito dopo la restituzione del status metodo.

Metodi e funzionalità

La tabella seguente illustra alcuni dei metodi importanti che appartengono alla agent classe . Per altre informazioni su tutti i metodi di agent classe, vedere Classe agente.

metodo Descrizione
inizio Pianifica l'oggetto agent per l'esecuzione e lo imposta allo stato agent_runnable.
eseguire Esegue l'attività che deve essere eseguita dall'oggetto agent .
fatto Sposta un agente nello stato agent_done.
Annulla Se l'agente non è stato avviato, questo metodo annulla l'esecuzione dell'agente e lo imposta sullo agent_canceled stato.
stato Recupera lo stato corrente dell'oggetto agent .
aspettare Attende che l'oggetto agent entri nello stato agent_done o nello stato agent_canceled.
attendi_tutto Attende che tutti gli oggetti forniti entrino nello stato agent_done o agent_canceled.
wait_for_one Attende che almeno uno degli oggetti forniti agent entri nello stato agent_done o agent_canceled.

Dopo aver creato un oggetto agente, chiamare il metodo concurrency::agent::start per pianificarlo per l'esecuzione. Il runtime chiama il metodo run dopo aver pianificato l'agente e averlo impostato sullo stato agent_runnable.

Il runtime non gestisce le eccezioni generate dagli agenti asincroni. Per altre informazioni sulla gestione delle eccezioni e sugli agenti, vedere Gestione delle eccezioni.

Esempio

Per un esempio che illustra come creare un'applicazione basata su agente di base, vedere Procedura dettagliata: Creazione di un'applicazione basata su agente.

Vedi anche

Libreria di agenti asincroni