Ejemplo n.º 1
0
        // constructors
        /// <summary>
        /// Initializes a new instance of the <see cref="TaskItem" /> class.
        /// </summary>
        /// <param name="recurrence">The recurrence</param>
        /// <param name="action">The action</param>
        /// <param name="lifetime">The lifetime</param>
        public TaskItem(Action<TaskActionParameters> action)
        {
            this.status = TaskItemStatus.NotStarted;
            this.lastRun = DateTimeOffset.MinValue;

            this.recurrence = Recurrence.Once;
            this.repeat = 1;
            this.action = action;
            this.lifetime = TimeSpan.Zero;

            this.activeActions = new Collection<TaskActionParameters>();
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Initializes this instance.
 /// </summary>
 public void Init()
 {
     this.Status = TaskItemStatus.Running;
     this.LastRun = DateTimeOffset.UtcNow;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Runs the specified date time.
        /// </summary>
        /// <param name="dateTime">The date time</param>
        public void Run(DateTimeOffset? dateTime = null)
        {
            DateTimeOffset now = dateTime.GetValueOrDefault(DateTimeOffset.UtcNow);

            if (now > this.Recurrence.DateEnd)
            {
                this.Status = TaskItemStatus.Stopped;
                return;
            }

            if (!this.Recurrence.CheckDate(now))
            {
                return;
            }

            if (this.Status != TaskItemStatus.Running)
            {
                return;
            }
            else if (now.Subtract(this.LastRun) < this.Recurrence.Interval)
            {
                return;
            }

            this.LastRun = now;

            CancellationTokenSource cancellationTokenSource;
            if (this.Lifetime != TimeSpan.Zero)
            {
                cancellationTokenSource = new CancellationTokenSource(this.Lifetime);
            }
            else
            {
                cancellationTokenSource = new CancellationTokenSource();
            }

            TaskActionParameters cronActionParameters = new TaskActionParameters(this, now, cancellationTokenSource);
            this.ActiveActions.Add(cronActionParameters);

            Action actionToRun = () =>
            {
                for (int i = this.Repeat; i > 0; i--) {
                    this.Action(cronActionParameters);
                }
                this.ActiveActions.Remove(cronActionParameters);
            };

            Task lastTask = Task.Run(actionToRun, cancellationTokenSource.Token);

            if (this.Recurrence.Interval == TimeSpan.Zero)
            {
                this.Status = TaskItemStatus.Stopped;
            }
        }
Ejemplo n.º 4
0
 public string GetTaskStatusUIElement(TaskItemStatus taskStatus)
 {
     return(_taskStatusUIElement[taskStatus]);
 }