Exemple #1
0
        /// <summary>
        /// Check if all child jobs are finished; if so, mark this job as finished.
        /// </summary>
        private void OnChildJobStateChanged(object?sender, EventArgs?arguments)
        {
            if (JobStateInfo.State == JobState.NotStarted || JobStateInfo.State == JobState.Suspended)
            {
                SetJobState(JobState.Running);
            }
            if (_jobMode == TaskJobMode.Consecutive || _jobMode == TaskJobMode.ConsecutiveStopAtFailure)
            {
                // if no jobs are running, start the next queued job
                if (ChildJobs.All(j => j.IsFinished() || j.JobStateInfo.State == JobState.NotStarted))
                {
                    if (_queue != null)
                    {
                        if (_jobMode == TaskJobMode.ConsecutiveStopAtFailure &&
                            ChildJobs.Any(j => j.JobStateInfo.State == JobState.Failed))
                        {
                            while (_queue.TryDequeue(out var failJob))
                            {
                                failJob.Fail();
                            }
                        }
                        else
                        {
                            if (_queue.TryDequeue(out var nextJob))
                            {
                                nextJob.StartJob();
                            }
                        }
                    }
                }
            }
            if (_acceptingChildJobs)
            {
                // do not conclude if more jobs may be added
                SetJobState(JobState.Suspended);
                return;
            }
            if (this.IsFinished())
            {
                return;
            }
            var childJobs = ChildJobs.Cast <TaskChildJob>();

            if (childJobs.All(j => j.IsCompleted))
            {
                if (childJobs.Any(j => j.IsFaulted && !j.IsCanceled))
                {
                    SetJobState(JobState.Failed);
                }
                else if (childJobs.Any(j => j.IsCanceled))
                {
                    SetJobState(JobState.Stopped);
                }
                else
                {
                    SetJobState(JobState.Completed);
                }
            }
        }
Exemple #2
0
 /// <summary>Returns a list of exceptions from this job and all child jobs.</summary>
 public void Errors(List <Exception> errors)
 {
     if (Error != null)
     {
         errors.Add(Error);
     }
     if (ChildJobs != null)
     {
         ChildJobs.ForEach(job => job.Errors(errors));
     }
 }
Exemple #3
0
 /// <summary>Returns true if all child jobs are completed.</summary>
 public bool AreChildJobsComplete()
 {
     return(ChildJobs.TrueForAll(job => job.IsCompleted));
 }
Exemple #4
0
 /// <summary>Returns true if job and all child jobs are completed.</summary>
 public bool IsJobAndChildJobsComplete()
 {
     return(isCompleted && ChildJobs.TrueForAll(job => job.IsJobAndChildJobsComplete()));
 }