Sdílet prostřednictvím


Asynchronní agenti

Asynchronní agent (nebo jenom agent) je komponenta aplikace, která pracuje asynchronně s jinými agenty k řešení větších výpočetních úloh. Agenta si můžete představit jako úlohu, která má nastavený životní cyklus. Jeden agent může například číst data ze vstupního/výstupního zařízení (například z klávesnice, souboru na disku nebo síťového připojení) a jiný agent může s těmito daty provádět akce, jakmile budou k dispozici. První agent pomocí předávání zpráv informuje druhého agenta, že je k dispozici více dat. Plánovač úloh Concurrency Runtime poskytuje efektivní mechanismus, který umožňuje agentům blokovat a poskytovat spolupráci bez nutnosti méně efektivní preempce.

Knihovna agentů definuje třídu concurrency::agent , která představuje asynchronního agenta. agent je abstraktní třída, která deklaruje virtuální metodu concurrency::agent::run. Metoda run provede úlohu prováděnou agentem. Vzhledem k tomu run , že je abstraktní, je nutné implementovat tuto metodu ve všech třídách, které odvozujete z agent.

Životní cyklus agenta

Agenti mají nastavený životní cyklus. Výčet concurrency::agent_status definuje různé stavy agenta. Následující obrázek je stavový diagram, který ukazuje, jak agenti postupuje z jednoho stavu do druhého. Na tomto obrázku představují plné čáry metody, které voláte z aplikace; tečkované čáry představují metody volané z modulu runtime.

Diagram stavu agenta

Následující tabulka popisuje jednotlivé stavy v výčtu agent_status .

Stav agenta Popis
agent_created Agent nebyl naplánován pro spuštění.
agent_runnable Modul runtime plánuje spuštění agenta.
agent_started Agent byl spuštěn a běží.
agent_done Agent dokončil.
agent_canceled Agent byl zrušen, než vstoupil do stavu started.

agent_created je počáteční stav agenta agent_runnable a agent_started jedná se o aktivní stavy a agent_doneagent_canceled jsou terminálové stavy.

Použijte metodu concurrency::agent::status k získání aktuálního stavu objektu agent. Metoda status je sice bezpečná pro souběžnost, ale stav agenta se může změnit do doby, kdy metoda status vrátí. Například agent může být ve agent_started stavu při volání status metody, ale přesunut do agent_done stavu těsně po status vrácení metody.

Metody a funkce

Následující tabulka uvádí některé z důležitých metod, které patří do agent třídy. Další informace o všech agent metodách třídy naleznete v tématu třída agenta.

metoda Popis
Start Naplánuje agent objekt pro spuštění a nastaví ho do agent_runnable stavu.
Spusťte Spustí úlohu, která má být provedena objektem agent .
hotový Přesune agenta do stavu agent_done.
zrušit Pokud agent nebyl spuštěn, tato metoda zruší spuštění agenta a nastaví ho do agent_canceled stavu.
stav Načte aktuální stav objektu agent .
Počkej Čeká, až objekt agent přejde do agent_done nebo agent_canceled stavu.
čekat_na_vše Čeká, až všechny zadané objekty agent vstoupí do stavu agent_done a agent_canceled.
čekat_na_jednoho Čeká na to, až alespoň jeden z uvedených agent objektů přejde do stavu agent_done nebo agent_canceled.

Po vytvoření objektu agenta zavolejte metodu concurrency::agent::start , která naplánuje spuštění. Modul runtime volá metodu run po naplánování agenta a nastaví ji do agent_runnable stavu.

Modul runtime nespravuje výjimky vyvolané asynchronními agenty. Další informace o zpracování výjimek a agentech naleznete v tématu Zpracování výjimek.

Příklad

Příklad, který ukazuje, jak vytvořit základní aplikaci založenou na agentech, najdete v tématu Návod: Vytvoření aplikace založené na agentech.

Viz také

Knihovna asynchronních agentů