Asynchronous Activity Completion
How to asynchronously complete an Activity
Asynchronous Activity Completion enables the Activity Function to return without the Activity Execution completing.
There are three steps to follow:
- The Activity provides the external system with identifying information needed to complete the Activity Execution. Identifying information can be a Task Token, or a combination of Namespace, Workflow Id, and Activity Id.
- The Activity Function completes in a way that identifies it as waiting to be completed by an external system.
- The Temporal Client is used to Heartbeat and complete the Activity.
To mark an Activity as completing asynchronously, do the following inside the Activity.
# Capture token for later completion
captured_token = activity.info().task_token
activity.raise_complete_async()
To update an Activity outside the Activity, use the get_async_activity_handle() method to get the handle of the Activity.
handle = my_client.get_async_activity_handle(task_token=captured_token)
Then, on that handle, you can call the results of the Activity, heartbeat
, complete
, fail
, or report_cancellation
method to update the Activity.
await handle.complete("Completion value.")