Asynchronous Activity completion - Ruby SDK
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 = Temporalio::Activity::Context.current.info.task_token
# Raise a special exception that says an activity will be completed somewhere else
raise Temporalio::Activity::CompleteAsyncError
To update an Activity outside the Activity, use the async_activity_handle method on the client to get the handle of the Activity.
handle = my_client.async_activity_handle(captured_token)
Then, on that handle, you can use heartbeat, complete, fail, or report_cancellation methods to update the Activity.
handle.complete('completion value')