Beispiel #1
0
 protected virtual static void OnJobsFlushed(JobsFlushedEventArgs args)
 {
     if (LongRunningJobBase.JobsFlushed != null)
     {
         LongRunningJobBase.JobsFlushed(null, args);
     }
 }
Beispiel #2
0
        private static LongRunningJobBase[] RaiseJobsFlushing(LongRunningJobBase[] allJobs, DateTime expirationTimeStamp)
        {
            JobsFlushingEventArgs args = new JobsFlushingEventArgs(allJobs, expirationTimeStamp);

            LongRunningJobBase.OnJobsFlushing(args);
            return(args.ExpiredJobs);
        }
Beispiel #3
0
 public static void FlushJobs()
 {
     lock (LongRunningJobBase._jobs)
     {
         LongRunningJobBase._FlushJobs();
     }
 }
Beispiel #4
0
 protected virtual static void OnJobsFlushing(JobsFlushingEventArgs args)
 {
     args.ExpiredJobs = LongRunningJobBase._jobs.Where(j => j.IsCompleted && j.ExpiresAt < args.ExpirationTimeStamp).ToArray();
     if (LongRunningJobBase.JobsFlushing != null)
     {
         LongRunningJobBase.JobsFlushing(null, args);
     }
 }
Beispiel #5
0
 protected LongRunningJobBase(Task task)
 {
     this.ID          = Guid.NewGuid();
     this._nestedTask = task;
     this._bgTask     = new Task(this._Worker);
     lock (LongRunningJobBase._jobs)
     {
         LongRunningJobBase._FlushJobs();
         LongRunningJobBase._jobs.Add(this);
     }
 }
Beispiel #6
0
        private static void _FlushJobs()
        {
            DateTime now = DateTime.Now;

            LongRunningJobBase[] expired = LongRunningJobBase.RaiseJobsFlushing(LongRunningJobBase._jobs.ToArray(), now);

            foreach (LongRunningJobBase job in expired)
            {
                LongRunningJobBase._jobs.Remove(job);
            }

            LongRunningJobBase.RaiseJobsFlushed(expired, LongRunningJobBase._jobs.ToArray());
        }
Beispiel #7
0
        public static TLongRunningJobType GetJob <TLongRunningJobType, TTaskType>(Guid id)
            where TLongRunningJobType : LongRunningJobBase <TLongRunningJobType, TTaskType>
            where TTaskType : Task
        {
            TLongRunningJobType result;

            lock (LongRunningJobBase._jobs)
            {
                LongRunningJobBase._FlushJobs();
                result = LongRunningJobBase._jobs.OfType <TLongRunningJobType>().FirstOrDefault(j => j.ID.Equals(id));
            }

            return(result);
        }
Beispiel #8
0
 protected virtual void OnJobCompleted(JobEventArgs <Task> args)
 {
     try
     {
         this.Error = args.Task.Exception;
     }
     catch { }
     finally
     {
         LongRunningJobBase._FlushJobs();
         args.Job.ExpiresAt   = DateTime.Now.Add((LongRunningJobBase.MaxJobAge > TimeSpan.Zero) ? LongRunningJobBase.MaxJobAge : LongRunningJobBase.DefaultMaxJobAge);
         args.Job.IsCompleted = true;
         if (this.JobCompleted != null)
         {
             this.JobCompleted(this, args);
         }
     }
 }
 public JobWaitFinishedEventArgs(LongRunningJobBase job, TTask task, int millisecondsTimeout, bool executionCompleted)
     : base(job, task, millisecondsTimeout)
 {
     this.ExecutionCompleted = executionCompleted;
 }
Beispiel #10
0
 public JobWaitingEventArgs(LongRunningJobBase job, TTask task, int millisecondsTimeout)
     : base(job, task)
 {
     this.MillisecondsTimeout = millisecondsTimeout;
 }
Beispiel #11
0
 private static void RaiseJobsFlushed(LongRunningJobBase[] expiredJobs, LongRunningJobBase[] currentJobs)
 {
     LongRunningJobBase.OnJobsFlushed(new JobsFlushedEventArgs(expiredJobs, currentJobs));
 }
Beispiel #12
0
 public JobEventArgs(LongRunningJobBase job, TTask task)
 {
     this.Job  = job;
     this.Task = task;
 }