Asynchronous Activity completion - .NET SDK
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
capturedToken = ActivityExecutionContext.Current.Info.TaskToken;
// Throw special exception that says an activity will be completed somewhere else
throw new CompleteAsyncException();
To update an Activity outside the Activity, use the GetAsyncActivityHandle() method to get the handle of the Activity.
var handle = myClient.GetAsyncActivityHandle(capturedToken);
Then, on that handle, you can call the results of the Activity, HeartbeatAsync, CompleteAsync, FailAsync, or ReportCancellationAsync method to update the Activity.
await handle.CompleteAsync("Completion value.");