Freigeben über


Asynchrone Agenten

Ein asynchroner Agent (oder nur Agent) ist eine Anwendungskomponente, die asynchron mit anderen Agents funktioniert, um größere Computeraufgaben zu lösen. Stellen Sie sich einen Agenten als Aufgabe vor, die einen festgelegten Lebenszyklus aufweist. Beispielsweise kann ein Agent Daten von einem Eingabe-/Ausgabegerät (z. B. Tastatur, Datei auf datenträger oder Netzwerkverbindung) lesen, und ein anderer Agent kann Aktionen für diese Daten ausführen, sobald diese verfügbar sind. Der erste Agent verwendet die Nachrichtenübergabe, um den zweiten Agent darüber zu informieren, dass weitere Daten verfügbar sind. Der Taskplaner "Concurrency Runtime" bietet einen effizienten Mechanismus, mit dem Agents kooperativ blockieren und ausbeuten können, ohne dass eine weniger effiziente Vorbesteuerung erforderlich ist.

Die Agents-Bibliothek definiert die Parallelitätsklasse::agent , um einen asynchronen Agent darzustellen. agent ist eine abstrakte Klasse, die die virtuelle Methode concurrency::agent::run deklariert. Die run Methode führt die Aufgabe aus, die vom Agent ausgeführt wird. Da run abstrakt ist, müssen Sie diese Methode in jeder Klasse implementieren, die Sie von agent ableiten.

Agent-Lebenszyklus

Agents verfügen über einen festgelegten Lebenszyklus. Die Concurrency::agent_status-Aufzählung definiert die verschiedenen Zustände eines Agenten. Die folgende Abbildung ist ein Zustandsdiagramm, das zeigt, wie Agents von einem Zustand zu einem anderen wechseln. In dieser Abbildung stellen durchgezogene Linien Methoden dar, die Sie von Ihrer Anwendung aufrufen; gepunktete Linien hingegen solche, die von der Laufzeit aufgerufen werden.

Agent-Status-Diagramm.

In der folgenden Tabelle werden die einzelnen Status in der agent_status Enumeration beschrieben.

Agentenstatus Beschreibung
agent_created Der Agent wurde nicht zur Ausführung eingeplant.
agent_runnable Die Runtime-Umgebung plant den Agent zur Ausführung ein.
agent_started Der Agent wurde gestartet und läuft.
agent_done Der Agent ist fertig.
agent_canceled Der Agent wurde gestoppt, bevor er den Zustand started erreichte.

agent_created ist der Anfangszustand eines Agenten agent_runnable und agent_started sind die aktiven Zustände und agent_doneagent_canceled sind die Terminalzustände.

Verwenden Sie die concurrency::agent::status-Methode, um den aktuellen Status eines agent Objekts abzurufen. Obwohl die status Methode thread-sicher ist, kann sich der Status des Agents ändern, sobald die status Methode zurückkehrt. Beispielsweise könnte sich ein Agent im agent_started Zustand befinden, wenn Sie die status Methode aufrufen, aber er wechselt direkt nach der Rückkehr der agent_done Methode in den status Zustand.

Methoden und Merkmale

In der folgenden Tabelle sind einige der wichtigen Methoden aufgeführt, die zur agent Klasse gehören. Weitere Informationen zu allen agent Klassenmethoden finden Sie unter agent Class.

Methode Beschreibung
anfangen Plant das agent Objekt zur Ausführung und versetzt es in den agent_runnable Zustand.
laufen Führt die Aufgabe aus, die vom agent Objekt ausgeführt werden soll.
fertig Verschiebt einen Agenten in den Zustand agent_done.
Abbrechen Wenn der Agent nicht gestartet wurde, bricht diese Methode die Ausführung des Agents ab und legt ihn auf den agent_canceled Zustand fest.
Status Ruft den aktuellen Status des agent Objekts ab.
Warte Wartet, bis das agent Objekt in den agent_done- oder agent_canceled-Zustand eintritt.
wait_for_all Wartet darauf, dass alle bereitgestellten agent Objekte den agent_done oder agent_canceled Zustand erreichen.
warte_auf_einen Wartet darauf, dass mindestens eines der bereitgestellten agent Objekte in den agent_done- oder agent_canceled-Zustand gelangt.

Rufen Sie nach dem Erstellen eines Agentobjekts die concurrency::agent::start-Methode auf, um es zur Ausführung zu planen. Die Laufzeit ruft die Methode nach dem run Planen des Agents auf und legt sie auf den agent_runnable Zustand fest.

Die Laufzeit verwaltet keine Ausnahmen, die von asynchronen Agents ausgelöst werden. Weitere Informationen zur Ausnahmebehandlung und zu Agents finden Sie unter "Ausnahmebehandlung".

Beispiel

Ein Beispiel zum Erstellen einer einfachen agentbasierten Anwendung finden Sie unter Walkthrough: Creating an Agent-Based Application.

Siehe auch

Asynchrone Agentenbibliothek