

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Abbrechen von Aktivitätsaufgaben in Amazon SWF
<a name="swf-dg-task-cancellation"></a>

Durch das Stornieren von Aktivitätsaufgaben wird der Entscheider darüber informiert, dass Aktivitäten, die nicht mehr ausgeführt werden müssen, beendet werden. Amazon SWF verwendet einen kooperativen Stornierungsmechanismus und unterbricht laufende Aktivitätsaufgaben nicht gewaltsam. Sie müssen Ihre Aktivitäts-Worker so programmieren, dass sie Abbruchanforderungen abhandeln können.

Der Entscheider kann eine Aktivitätsaufgabe abbrechen, während diese eine Entscheidungsaufgabe verarbeitet. Der Entscheider beendet eine Aktivitätsaufgabe mit der Aktion `RespondDecisionTaskCompleted` mit der Entscheidung `RequestCancelActivityTask`.

Wenn die Aktivitätsaufgabe vom Aktivitäts-Worker noch nicht übernommen wurde, bricht der Service die Aufgabe ab. Beachten Sie, dass möglicherweise eine Race Condition (Wettlaufsituation) vorliegt, da ein Aktivitäts-Worker die Aufgabe jederzeit übernehmen könnte. Wenn die Aufgabe bereits einem Aktivitäts-Worker zugewiesen wurde, wird eine Anforderung zum Abbrechen der Aufgabe an den Aktivitäts-Worker gesendet.

In diesem Beispiel wurde der Workflow-Ausführung ein Signal zum Stornieren einer Bestellung gesendet.

```
https://swf.us-east-1.amazonaws.com
SignalWorkflowExecution
{"domain": "867530901",
 "workflowId": "20110927-T-1",
 "runId": "9ba33198-4b18-4792-9c15-7181fb3a8852",
 "signalName": "CancelOrder",
 "input": "order 3553"}
```

Wenn die Workflow-Ausführung das Signal empfängt, gibt Amazon SWF eine erfolgreiche HTTP-Antwort zurück, die der folgenden ähnelt. Amazon SWF generiert eine Entscheidungsaufgabe, um den Entscheider darüber zu informieren, das Signal zu verarbeiten.

```
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: application/json
x-amzn-RequestId: 6c0373ce-074c-11e1-9083-8318c48dee96
```

Wenn der Entscheider die Entscheidungsaufgabe verarbeitet und das Signal im Verlauf findet, versucht er, die offene Aktivität mit der Aktivitäts-ID `ShipOrderActivity0001` abzubrechen. Die Aktivitäts-ID wird im Workflow-Verlauf durch die Aktivitätsplanung bereitgestellt.

```
https://swf.us-east-1.amazonaws.com
RespondDecisionTaskCompleted
{
  "taskToken":"12342e17-80f6-FAKE-TASK-TOKEN32f0223",
  "decisions":[{
          "decisionType":"RequestCancelActivityTask",
          "RequestCancelActivityTaskDecisionAttributes":{
              "ActivityID":"ShipOrderActivity0001"
          }
      }
  ]
}
```

Wenn Amazon SWF die Stornierungsanfrage erfolgreich empfängt, gibt es eine erfolgreiche HTTP-Antwort zurück, die der folgenden ähnelt:

```
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: application/json
x-amzn-RequestId: 6c0373ce-074c-11e1-9083-8318c48dee96
```

Der Abbruchversuch wird im Verlauf als `ActivityTaskCancelRequested`-Ereignis protokolliert.

Wenn die Aufgabe erfolgreich storniert wurde — was durch ein `ActivityTaskCanceled` Ereignis angezeigt wird —, programmieren Sie Ihren Entscheider so, dass er nach dem Abbrechen der Aufgabe die entsprechenden Schritte ergreift, z. B. die Workflow-Ausführung zu beenden.

Wenn die Aktivitätsaufgabe nicht abgebrochen werden konnte, z. B. wenn die Aufgabe abgeschlossen ist, fehlschlägt oder ein Timeout eintritt, anstatt sie abzubrechen, sollte Ihr Entscheider die Ergebnisse der Aktivität akzeptieren oder alle aufgrund Ihres Anwendungsfalls erforderlichen Säuberungs- oder Abhilfemaßnahmen durchführen.

Wenn die Aktivitätsaufgabe bereits einem Aktivitäts-Worker zugewiesen wurde, wird die Abbruchanforderung über den Task-Heartbeat-Mechanismus übermittelt. Mithilfe `RecordActivityTaskHeartbeat` dieser Aktivität können Mitarbeiter Amazon SWF regelmäßig melden, dass die Aufgabe noch in Bearbeitung ist.

Beachten Sie, dass Aktivitäts-Worker keinen Heartbeat senden müssen, auch wenn dies für langfristige Aufgaben empfohlen wird. Für den Aufgabenabbruch sind regelmäßige Heartbeats erforderlich. Wenn der Worker keinen Heartbeat sendet, kann die Aufgabe nicht abgebrochen werden.

Wenn der Entscheider den Abbruch der Aufgabe anfordert, setzt Amazon SWF den Wert des `cancelRequest` Objekts auf true. Das Objekt `cancelRequest` gehört zum Objekt `ActivityTaskStatus`, das vom Service als Antwort auf `RecordActivityTaskHeartbeat` zurückgegeben wird.

Amazon SWF verhindert nicht den erfolgreichen Abschluss einer Aktivitätsaufgabe, deren Stornierung beantragt wurde. Es liegt an der Aktivität, zu entscheiden, wie mit der Stornierungsanfrage umgegangen werden soll. Programmieren Sie abhängig von Ihren Anforderungen den Aktivitäts-Worker so, dass die Aktivitätsaufgabe entweder abgebrochen oder Abbruchanforderung ignoriert wird.

Wenn Sie möchten, dass der Aktivitäts-Worker bestätigt, dass die Aktivitätsaufgabe abgebrochen wurde, programmieren Sie ihn so, dass die Antwort `RespondActivityTaskCanceled` gesendet wird. Wenn Sie möchten, dass der Aktivitäts-Worker die Aufgabe abschließt, programmieren Sie ihn so, dass die Standardantwort `RespondActivityTaskCompleted` gesendet wird. 

Wenn Amazon SWF die `RespondActivityTaskCompleted` `RespondActivityTaskCanceled` Oder-Anfrage erhält, aktualisiert es den Verlauf der Workflow-Ausführung und plant eine Entscheidungsaufgabe, um den Entscheider zu informieren.

Programmieren Sie den Entscheider so, dass die Entscheidungsaufgabe verarbeitet wird und alle zusätzlichen Entscheidungen zurückgegeben werden. Wenn die Aktivitätsaufgabe erfolgreich abgebrochen wurde, programmieren Sie den Entscheider so, dass die für das Fortführen oder Schließen der Workflow-Ausführung erforderlichen Aufgaben ausgeführt werden. Wenn die Aktivitätsaufgabe nicht erfolgreich abgebrochen wurde, programmieren Sie den Entscheider so, dass die Ergebnisse akzeptiert oder ignoriert werden oder eine Bereinigung geplant wird.