Asynchrone Agents
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 Parallelität::agent::run deklariert. Die run
Methode führt die Aufgabe aus, die vom Agent ausgeführt wird. Da run
es sich um eine abstrakte Methode handelt, müssen Sie diese Methode in jeder Klasse implementieren, von agent
der Sie abgeleitet sind.
Agent-Lebenszyklus
Agents verfügen über einen festgelegten Lebenszyklus. Die Parallelität::agent_status-Aufzählung definiert die verschiedenen Zustände eines Agents. 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 stellen Methoden dar, die von der Laufzeit aufgerufen werden.
In der folgenden Tabelle werden die einzelnen Status in der agent_status
Enumeration beschrieben.
Agentstatus | Beschreibung |
---|---|
agent_created |
Der Agent wurde nicht für die Ausführung geplant. |
agent_runnable |
Die Laufzeit plant den Agent für die Ausführung. |
agent_started |
Der Agent wurde gestartet und wird ausgeführt. |
agent_done |
Der Agent ist fertig. |
agent_canceled |
Der Agent wurde abgebrochen, bevor er in den started Zustand gelangt war. |
agent_created
ist der Anfangszustand eines Agenten agent_runnable
und agent_started
sind die aktiven Zustände und agent_done
agent_canceled
sind die Terminalzustände.
Verwenden Sie die Parallelität::agent::status-Methode , um den aktuellen Status eines agent
Objekts abzurufen. Obwohl die status
Methode parallel ist, kann sich der Status des Agents ändern, wenn die status
Methode zurückgegeben wird. Beispielsweise könnte sich ein Agent im agent_started
Zustand befinden, wenn Sie die status
Methode aufrufen, aber direkt nach dem Zurückgeben der status
Methode in den agent_done
Zustand verschoben.
Methoden und Features
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 |
---|---|
start | Plant das Objekt für die agent Ausführung und legt es auf den agent_runnable Zustand fest. |
run | Führt die Aufgabe aus, die agent vom Objekt ausgeführt werden soll. |
fertig | Verschiebt einen Agent in den agent_done Zustand. |
cancel | 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 Zustand oder agent_canceled in den agent_done Zustand wechselt. |
wait_for_all | Wartet auf alle bereitgestellten agent Objekte, um in den agent_done Zustand zu agent_canceled gelangen. |
wait_for_one | Wartet auf mindestens eins der bereitgestellten agent Objekte, um in den agent_done Zustand zu agent_canceled gelangen. |
Rufen Sie nach dem Erstellen eines Agentobjekts die Parallelität::agent::start-Methode auf, um sie für die 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.