/// <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();
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
            }
        }