

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 设备工作流程
<a name="jobs-workflow-device-online"></a>

设备可以使用以下任一方式处理它运行的任务。
+ 

**获取下一个任务**

  1. 当设备首次联机时，它应订阅设备的 `notify-next` 主题。

  1. 使用 jobId `$next` 调用 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API 以获取下一个任务、其任务文档和其他详细信息，包括保存在 `statusDetails` 中的任何状态。如果任务文档具有代码文件签名，则您必须验证签名，然后才能继续处理任务请求。

  1. 调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 以更新任务状态。或者，要在一个调用中将此步骤与上一步骤合并，设备可调用 [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution)。

  1. （可选）您可在调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) 或 [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution) 时为 `stepTimeoutInMinutes` 设置值来添加步骤计时器。

  1. 使用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 执行任务文档所指定的操作以报告任务的进度。

  1. 通过使用此 jobId 调用 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API 来继续监控任务执行。如果删除了任务执行，[DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) 将返回 `ResourceNotFoundException`。

     如果在设备运行任务时取消或删除了任务执行，则设备应能够恢复到有效状态。

  1. 在任务完成后调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 以更新任务状态并报告成功或失败。

  1. 由于此任务的执行状态已更改为最终状态，因此，可用于执行的下一个任务（如果有）将发生更改。设备将收到下一个待处理任务执行已更改的通知。此时，设备将按照步骤 2 中所述继续操作。

  如果设备保持联机状态，则将继续收到下一个待处理任务执行的通知。这包括它在完成任务或添加新的待处理任务执行时的任务执行数据。在发生此情况时，设备将按照步骤 2 中所述继续操作。
+ 

**从可用任务中选择**

  1. 当设备首次联机时，它应订阅事物的 `notify` 主题。

  1. 调用 [GetPendingJobExecutions](jobs-mqtt-api.md#mqtt-getpendingjobexecutions) MQTT API 以获取待处理任务执行的列表。

  1. 如果列表中包含一个或多个任务执行，请选择一个任务执行。

  1. 调用 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API 以获取任务文档和其它详细信息，包括保存在 `statusDetails` 中的任何状态。

  1. 调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 以更新任务状态。如果在此命令中将 `includeJobDocument` 字段设置为 `true`，则设备可跳过上一个步骤并在此时检索任务文档。

  1. （可选）您可在调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) 时为 `stepTimeoutInMinutes` 设置值来添加步骤计时器。

  1. 使用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 执行任务文档所指定的操作以报告任务的进度。

  1. 通过使用此 jobId 调用 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API 来继续监控任务执行。如果在设备运行任务时取消或删除了任务执行，则设备应能够恢复到有效状态。

  1. 在任务完成后调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 以更新任务状态并报告成功或失败。

  如果设备保持联机状态，则在一个新的待处理任务执行变为可用时，它将收到所有待处理任务执行的通知。在发生此情况时，设备可按照步骤 2 中所述继续操作。

如果设备无法执行任务，它应调用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 来将任务状态更新为 `REJECTED`。