/// <summary> /// Принудительно мнгновенно запускает задачу, находящуюся в планировщике /// </summary> /// <param name="task">Запускаемая задача.</param> public void RunTask(SchedulerTask task) { lock(_tasks.SyncRoot) { if(_tasks.Contains(task) == false) throw new PulsarException("Планировщик не содержит задачу [{0}]!", task); lock(task) { task.State = SchedulerTaskState.Waiting; RunTaskAction(task); } } }
//------------------------------------------------------------------------------------- /// <summary> /// Добавляет задачу в планировщик /// </summary> /// <param name="task">Добавляемая задача.</param> public void AddTask(SchedulerTask task) { lock(_tasks.SyncRoot) { _tasks.Add(task); lock(task) { task.State = SchedulerTaskState.Waiting; if(task.Priority == SchedulerTaskPriority.Critical) RunTaskAction(task); } } }
/// <summary> /// Удаляет задачу /// </summary> /// <param name="task">Удаляемая задача.</param> public void RemoveTask(SchedulerTask task) { lock(_tasks.SyncRoot) _tasks.Remove(task); }
/// <summary> /// Запускает задачу на выполнение. НЕ ПОТОКОБЕЗОПАСНЫЙ! /// </summary> /// <param name="task"></param> protected void RunTaskAction(SchedulerTask task) { lock(task.SyncRoot) task.State = SchedulerTaskState.Running; Pulsar.PulsarThreadPool.Run(TaskWork, task); _runned++; }