

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Cancelamento de tarefas de atividade no Amazon SWF
<a name="swf-dg-task-cancellation"></a>

O cancelamento da tarefa da atividade informa o decisor a encerrar as atividades que não precisam mais ser realizadas. O Amazon SWF usa um mecanismo de cancelamento cooperativo e não interrompe forçosamente a execução de tarefas de atividade. Você deve programar seus operadores de atividade para lidar com solicitações de cancelamento.

O agente de decisão pode optar por cancelar uma tarefa de atividade enquanto está processando uma tarefa de decisão. Para cancelar uma tarefa de atividade, o agente de decisão usa a ação `RespondDecisionTaskCompleted` com a decisão `RequestCancelActivityTask`.

Se a tarefa de atividade ainda não tiver sido adquirida por um operador de atividade, o serviço cancelará a tarefa. Observe que existe uma possível condição de corrida em que um operador de atividade poderia adquirir a tarefa a qualquer momento. Se a tarefa já tiver sido atribuída a um operador de atividade, este será solicitado a cancelá-la.

Neste exemplo, a execução de fluxo de trabalho recebe um sinal para cancelar o pedido.

```
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"}
```

Se houver sinal na execução do fluxo de trabalho, o Amazon SWF retornará uma resposta HTTP bem-sucedida similar ao seguinte: O Amazon SWF gerará uma tarefa de decisão para informar o tomador de decisão a processar o sinal.

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

Quando o agente de decisão processar a tarefa de decisão e vir o sinal no histórico, ele tentará cancelar a atividade pendente que possui o ID de atividade `ShipOrderActivity0001`. O ID de atividade é fornecido no histórico de fluxo de trabalho originado do evento de agendamento de tarefa de atividade.

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

Se o Amazon SWF receber com êxito a solicitação de cancelamento, ele retornará uma resposta HTTP bem-sucedida semelhante à seguinte:

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

A tentativa de cancelamento é registrada no histórico como o evento `ActivityTaskCancelRequested`.

Se a tarefa for cancelada com êxito, conforme indicado por um evento `ActivityTaskCanceled`, programe seu agente de decisão para executar as etapas apropriadas que devem seguir o cancelamento da tarefa, como encerrar a execução do fluxo de trabalho.

Se a tarefa da atividade não puder ser cancelada (por exemplo, se a tarefa for concluída, falhar ou atingir o tempo limite em vez de ser cancelada), o agente de decisão deverá aceitar os resultados da atividade ou realizar qualquer limpeza ou mitigação necessária para o seu caso de uso.

Se a tarefa de atividade já tiver sido adquirida por um operador de atividade, a solicitação de cancelamento será transmitida por meio do mecanismo de heartbeat de tarefa. Os operadores de atividade podem usar periodicamente `RecordActivityTaskHeartbeat` para informar ao Amazon SWF que a tarefa ainda está em andamento.

Observe que operadores de atividade não são obrigados a realizar heartbeats, embora isso seja recomendado para tarefas de longa duração. O cancelamento da tarefa requer que um heartbeat periódico seja registrado. Se o operador não realizar o heartbeat, a tarefa não poderá ser cancelada.

Se o agente de decisão solicitar o cancelamento da tarefa, o Amazon SWF definirá o valor do objeto `cancelRequest` como true. O objeto `cancelRequest` faz parte do objeto `ActivityTaskStatus` que é retornado pelo serviço em resposta a `RecordActivityTaskHeartbeat`.

O Amazon SWF não impede a conclusão bem-sucedida de uma tarefa de atividade cujo cancelamento tenha sido solicitado; cabe à atividade determinar como lidar com a solicitação de cancelamento. Dependendo dos seus requisitos, programe o operador de atividade para cancelar a tarefa de atividade ou ignorar a solicitação de cancelamento.

Se quiser que o operador de atividade indique que o trabalho da tarefa de atividade foi cancelado, programe-o para responder com um `RespondActivityTaskCanceled`. Se quiser que o operador de atividade conclua a tarefa, programe-a para responder com um `RespondActivityTaskCompleted` padrão. 

Quando o Amazon SWF recebe a solicitação `RespondActivityTaskCompleted` ou `RespondActivityTaskCanceled`, ele atualiza o histórico de execução do fluxo de trabalho e agenda uma tarefa de decisão para informar o agente de decisão.

Programe o agente de decisão para processar a tarefa de decisão e retornar decisões adicionais. Se a tarefa de atividade tiver sido cancelada com êxito, programe o agente de decisão para realizar as tarefas necessárias para continuar ou encerrar a execução de fluxo de trabalho. Se a tarefa de atividade não tiver sido cancelada com êxito, programe o agente de decisão para aceitar os resultados, ignorar os resultados ou agendar qualquer limpeza necessária.