// Wait for the queue jobs to complete. public static bool WaitForQueue(SvcQueueSystem.QueueMsgType jobType, SvcQueueSystem.QueueSystemClient queueSystemClient, DateTime startTime) { const int MAX_WAIT = 60; // Maximum wait time, in seconds. int numJobs = 1; // Number of jobs in the queue. bool completed = false; // Queue job completed. SvcQueueSystem.QueueStatusDataSet queueStatusDs = new SvcQueueSystem.QueueStatusDataSet(); int timeout = 0; // Number of seconds waited. Console.Write("Waiting for job: {0} ", jobType.ToString()); SvcQueueSystem.QueueMsgType[] messageTypes = { jobType }; SvcQueueSystem.JobState[] jobStates = { SvcQueueSystem.JobState.Success }; while (timeout < MAX_WAIT) { System.Threading.Thread.Sleep(1000); // Sleep one second. queueStatusDs = queueSystemClient.ReadMyJobStatus( messageTypes, jobStates, startTime, DateTime.Now, numJobs, true, SvcQueueSystem.SortColumn.QueuePosition, SvcQueueSystem.SortOrder.LastOrder); timeout++; Console.Write("."); } Console.WriteLine(); if (queueStatusDs.Status.Count == numJobs) completed = true; return completed; }
public static bool WaitForQueueJobCompletion(Guid trackingGuid, int messageType, SvcQueueSystem.QueueSystemClient queueSystemClient) { //System.Threading.Thread.Sleep(2000); SvcQueueSystem.QueueStatusDataSet queueStatusDataSet = new SvcQueueSystem.QueueStatusDataSet(); SvcQueueSystem.QueueStatusRequestDataSet queueStatusRequestDataSet = new SvcQueueSystem.QueueStatusRequestDataSet(); SvcQueueSystem.QueueStatusRequestDataSet.StatusRequestRow statusRequestRow = queueStatusRequestDataSet.StatusRequest.NewStatusRequestRow(); statusRequestRow.JobGUID = trackingGuid; //Guid.NewGuid(); statusRequestRow.JobGroupGUID = Guid.NewGuid(); statusRequestRow.MessageType = messageType; queueStatusRequestDataSet.StatusRequest.AddStatusRequestRow(statusRequestRow); bool inProcess = true; bool result = false; DateTime startTime = DateTime.Now; int successState = (int)SvcQueueSystem.JobState.Success; int failedState = (int)SvcQueueSystem.JobState.Failed; int blockedState = (int)SvcQueueSystem.JobState.CorrelationBlocked; List<int> errorList = new List<int>(); while (inProcess) { queueStatusDataSet = queueSystemClient.ReadJobStatus(queueStatusRequestDataSet, false, SvcQueueSystem.SortColumn.Undefined, SvcQueueSystem.SortOrder.Undefined); bool noRow = true; foreach (SvcQueueSystem.QueueStatusDataSet.StatusRow statusRow in queueStatusDataSet.Status) { noRow = false; if (statusRow["ErrorInfo"] != System.DBNull.Value) { errorList = CheckStatusRowErrors(statusRow["ErrorInfo"].ToString()); if (errorList.Count > 0 || statusRow.JobCompletionState == blockedState || statusRow.JobCompletionState == failedState) { inProcess = false; } } if (statusRow.JobCompletionState == successState) { inProcess = false; result = true; } else { inProcess = true; System.Threading.Thread.Sleep(500); // Sleep 1/2 second. } } if (noRow) return true; DateTime endTime = DateTime.Now; TimeSpan span = endTime.Subtract(startTime); if (span.Seconds > 20) //Wait for only 20 secs - and then bail out. { return result;//result = false; } } return result; }