Amazon.StepFunctions.AmazonStepFunctionsClient.DescribeExecutionAsync C# (CSharp) Метод

DescribeExecutionAsync() публичный Метод

Initiates the asynchronous execution of the DescribeExecution operation.
public DescribeExecutionAsync ( DescribeExecutionRequest request, System cancellationToken = default(CancellationToken) ) : Task
request Amazon.StepFunctions.Model.DescribeExecutionRequest Container for the necessary parameters to execute the DescribeExecution operation.
cancellationToken System /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. ///
Результат Task
        public Task<DescribeExecutionResponse> DescribeExecutionAsync(DescribeExecutionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var marshaller = new DescribeExecutionRequestMarshaller();
            var unmarshaller = DescribeExecutionResponseUnmarshaller.Instance;

            return InvokeAsync<DescribeExecutionRequest,DescribeExecutionResponse>(request, marshaller, 
                unmarshaller, cancellationToken);
        }

Usage Example

        static async Task <string> Wait(string arn, TimeSpan wait, TimeSpan max)
        {
            var  startTime      = DateTimeOffset.Now;
            var  client         = new Amazon.StepFunctions.AmazonStepFunctionsClient();
            bool shouldContinue = true;

            while (shouldContinue)
            {
                var result = await client.DescribeExecutionAsync(new DescribeExecutionRequest()
                {
                    ExecutionArn = arn
                });

                Console.WriteLine(result.Status.Value);
                if (result.Status == ExecutionStatus.SUCCEEDED)
                {
                    Console.WriteLine("::set-output name=statemachineexecutionarn::" + result.Output);
                    Console.WriteLine("::set-output name=result::" + result.Output);

                    return(result.Output);
                }
                else if (result.Status == ExecutionStatus.RUNNING)
                {
                    if (DateTimeOffset.Now > startTime.Add(max))
                    {
                        //timed out
                        throw new Exception("The state machine retried the max time");
                    }

                    await Task.Delay(wait);
                }
                else if (result.Status == ExecutionStatus.ABORTED)
                {
                    throw new Exception("State machine aborted ");
                }
                else if (result.Status == ExecutionStatus.FAILED)
                {
                    var history = await client.GetExecutionHistoryAsync(new GetExecutionHistoryRequest()
                    {
                        ExecutionArn         = arn,
                        ReverseOrder         = true,
                        IncludeExecutionData = true
                    });

                    var reason = history.Events
                                 .FirstOrDefault(x => x.ExecutionFailedEventDetails != null)?.ExecutionFailedEventDetails
                                 .Cause ?? "Unknown";

                    throw new Exception("State machine failed. Reason: " + reason);
                }
                else if (result.Status == ExecutionStatus.TIMED_OUT)
                {
                    throw new Exception("State machine timed out ");
                }
            }
            return(string.Empty);
        }