Пример #1
0
        internal RecurrentJob Steal()
        {
            RecurrentJob job = null;
            _jobsQueue.TryDequeue(out job);

            return job;
        }
Пример #2
0
 public void Reset()
 {
     PauseAll();
     while (_jobsQueue.Count > 0)
     {
         RecurrentJob job = null;
         while (!_jobsQueue.TryDequeue(out job))
         {
             // Just wait for the job to finally dequeue
         }
     }
     StartAll();
 }
Пример #3
0
        public void Schedule(RecurrentJob job)
        {
            // If the job was already scheduled somewhere, dont't schedule
            if (job.Status != JobStatus.NotScheduled)
            {
                return;
            }

            // If the job has any unfinished dependencies, make it wait for them
            var dependencies = job.GetDependencies();
            var someNotFinished = dependencies.Any(d => d.Status != JobStatus.Done);
            if (someNotFinished)
            {
                foreach (var dependencyJob in dependencies.Where(d => d.Status != JobStatus.Done))
                {
                    dependencyJob.AddDependant(job);
                }
                return;
            }

            // If the job is free to schedule, do it
            job.Status = JobStatus.Scheduled;
            _jobsQueue.Enqueue(job);
        }