Exemplo n.º 1
0
        /// <summary>
        /// Waits for the task instance status to change or timeout
        /// </summary>
        /// <param name="id"></param>
        /// <param name="process"></param>
        /// <param name="currentStatus"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        private TaskInstanceStatues WaitForStatusChange(Guid id, Process process, TaskInstanceStatues currentStatus, TimeSpan timeout)
        {
            var timeNow     = DateTime.UtcNow;
            var waitTimeout = timeNow.Add(timeout);

            TaskInstanceStatues newStatus = currentStatus;

            do
            {
                // Wait a bit before we check the status
                if (!process.HasExited)
                {
                    Thread.Sleep(2000);
                }

                using var scope = _repositoryFactory.BeginRepositoryScope();
                var          taskInstanceRepository = scope.CreateRepository <ITaskInstanceRepository>();
                TaskInstance taskInstance           = taskInstanceRepository.Get(id);
                newStatus = taskInstance.Status;
            } while (currentStatus == newStatus && DateTime.UtcNow < waitTimeout && !process.HasExited);

            _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0, 0,
                                                                                                 string.Format("WaitForStatusChange [TID: {0}] Waited for {1}", id, DateTime.UtcNow - timeNow)));

            return(newStatus);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Waits for task instance to each completed status or timeout
        /// </summary>
        /// <param name="id"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        private TaskInstanceStatues WaitForCompletion(Guid id, TimeSpan timeout)
        {
            DateTime            timeoutEnd = DateTime.UtcNow.Add(timeout);
            TaskInstanceStatues status     = TaskInstanceStatues.InProgress;

            do
            {
                using var scope = _repositoryFactory.BeginRepositoryScope();
                var taskInstanceRepository = scope.CreateRepository <ITaskInstanceRepository>();
                status = taskInstanceRepository.Get(id).Status;
                if (Array.IndexOf(new TaskInstanceStatues[] { TaskInstanceStatues.CompletedError, TaskInstanceStatues.CompletedSuccess }, status) == -1 && DateTime.UtcNow < timeoutEnd)
                {
                    Thread.Sleep(2000);
                }
                else   // Completed or timeout
                {
                    break;
                }
            } while (true);
            return(status);
        }