// 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>(); }
/// <summary> /// Initializes this instance. /// </summary> public void Init() { this.Status = TaskItemStatus.Running; this.LastRun = DateTimeOffset.UtcNow; }
/// <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; } }
public string GetTaskStatusUIElement(TaskItemStatus taskStatus) { return(_taskStatusUIElement[taskStatus]); }