public static OrchestrationState WaitForInstance(TaskHubClient taskHubClient, OrchestrationInstance instance, int timeoutSeconds) { OrchestrationStatus status = OrchestrationStatus.Running; if (instance == null || string.IsNullOrWhiteSpace(instance.InstanceId)) { throw new ArgumentException("instance"); } int sleepForSeconds = 30; while (timeoutSeconds > 0) { try { var state = taskHubClient.GetOrchestrationState(instance.InstanceId); if (state != null) status = state.OrchestrationStatus; if (status == OrchestrationStatus.Running) { System.Threading.Thread.Sleep(sleepForSeconds * 1000); timeoutSeconds -= sleepForSeconds; } else { // Session state deleted after completion return state; } } catch (Exception ex) { Console.WriteLine(string.Format("Error retrieving state for instance [instanceId: '{0}', executionId: '{1}'].", instance.InstanceId, instance.ExecutionId)); Console.WriteLine(ex.ToString()); } } throw new TimeoutException("Timeout expired: " + timeoutSeconds.ToString()); }
public static bool WaitForInstance(TaskHubClient taskHubClient, OrchestrationInstance instance, int timeoutSeconds, bool waitForCompletion = true) { if (instance == null || string.IsNullOrWhiteSpace(instance.InstanceId)) { throw new ArgumentException("instance"); } int sleepForSeconds = 2; while (timeoutSeconds > 0) { OrchestrationState state = taskHubClient.GetOrchestrationState(instance.InstanceId); if (state == null || (waitForCompletion && state.OrchestrationStatus == OrchestrationStatus.Running)) { Thread.Sleep(sleepForSeconds*1000); timeoutSeconds -= sleepForSeconds; } else { // Session state deleted after completion return true; } } return false; }