/// <summary> /// Adds a task that was scheduled for execution /// </summary> /// <param name="task">the task that was been selected for execution</param> internal void TaskScheduled(TaskContainer task) { ConcurrentQueue <TaskContainer> queue = tasks[task.Task.Priority]; if (task.Task.Active) { queue.Enqueue(task); lock (workerPulse) { Monitor.Pulse(workerPulse); } } else { task.Task.Dispose(); } }
/// <summary> /// Checks the schedule for a specific task /// </summary> /// <param name="task">the task for which to create a schedule request</param> /// <param name="action">the action to take when the schedule applies</param> private async Task CheckScheduleAsync(TaskContainer task, Func <ITask, Task> action) { bool scheduled = false; if (task.Request?.SchedulerName != null) { TaskScheduler scl = TaskScheduler.GetScheduler(task.Request.SchedulerName); if (await scl.RunScheduledTaskAsync(task.Request, action)) { scheduled = true; } } if (!scheduled && task.Task.Active) { await action(task.Task); } }
/// <summary> /// Checks the schedule for a specific task /// </summary> /// <param name="task">the task for which to create a schedule request</param> /// <param name="action">the action to take when the schedule applies</param> private void CheckSchedule(TaskContainer task, Action <ITask> action) { bool scheduled = false; if (task.Request?.SchedulerName != null) { TaskScheduler scl = TaskScheduler.GetScheduler(task.Request.SchedulerName); if (scl.RunScheduledTask(task.Request, action)) { scheduled = true; } } if (!scheduled && task.Task.Active) { action(task.Task); } }
/// <summary> /// Checks the schedule for a specific task /// </summary> /// <param name="task">the task for which to create a schedule request</param> /// <param name="action">the action to take when the schedule applies</param> private void CheckSchedule(TaskContainer task, Action <ITask> action) { bool scheduled = false; /*using (task.DemandExclusive()) * { * foreach (SchedulerPolicy policy in task.Schedules) * // (!string.IsNullOrEmpty(task.SchedulerName) && TaskScheduler.SchedulerExists(task.SchedulerName) && task.Active) * { * if (!string.IsNullOrEmpty(policy.SchedulerName) && * TaskScheduler.SchedulerExists(policy.SchedulerName) && * task.Active) * { * if (requests.ContainsKey(policy.SchedulerName)) * { * requests[policy.SchedulerName].AddInstruction(policy.SchedulerInstruction); * } * else * { * TaskScheduler scl = TaskScheduler.GetScheduler(policy.SchedulerName); * requests.Add(policy.SchedulerName, * scl.CreateRequest(parent, task, policy.SchedulerInstruction)); * } * } * } * }*/ /*foreach (KeyValuePair<string, TaskScheduler.ScheduleRequest> req in requests) * {*/ if (task.Request?.SchedulerName != null) { TaskScheduler scl = TaskScheduler.GetScheduler(task.Request.SchedulerName); if (scl.RunScheduledTask(task.Request, action)) { scheduled = true; } } if (!scheduled && task.Task.Active) { action(task.Task); } }