Esempio n. 1
0
        /// <summary>
        /// Adds a scheduled task to this instance of Schtick.
        /// </summary>
        /// <param name="name">A unique name for this task. If null, a guid will be used.</param>
        /// <param name="schedule">A Schyntax Schedule object.</param>
        /// <param name="callback">Function which will be called each time the task is supposed to run.</param>
        /// <param name="autoRun">If true, Start() will be called on the task automatically.</param>
        /// <param name="lastKnownEvent">The last Date when the task is known to have run. Used for Task Windows.</param>
        /// <param name="window">
        /// The period of time after an event should have run where it would still be appropriate to run it.
        /// See Task Windows documentation for more details.
        /// </param>
        public ScheduledTask AddTask(
            string name,
            Schedule schedule,
            ScheduledTaskCallback callback,
            bool autoRun = true,
            DateTimeOffset lastKnownEvent = default(DateTimeOffset),
            TimeSpan window = default(TimeSpan))
        {
            if (callback == null)
                throw new ArgumentNullException(nameof(callback));

            return AddTaskImpl(name, schedule, callback, null, autoRun, lastKnownEvent, window);
        }
Esempio n. 2
0
        internal ScheduledTask(Schtick schtick, string name, Schedule schedule, ScheduledTaskCallback callback, ScheduledTaskAsyncCallback asyncCallback)
        {
            _schtick = schtick;
            Name = name;
            Schedule = schedule;

            if ((callback == null) == (asyncCallback == null))
                throw new Exception("callback or asyncCallback must be specified, but not both.");

            Callback = callback;
            AsyncCallback = asyncCallback;
        }
Esempio n. 3
0
        public void UpdateSchedule(Schedule schedule)
        {
            if (schedule == null)
                throw new ArgumentNullException(nameof(schedule));

            lock (_scheduleLock)
            {
                var wasRunning = IsScheduleRunning;
                if (wasRunning)
                    StopSchedule();

                Schedule = schedule;

                if (wasRunning)
                    StartSchedule();
            }
        }
Esempio n. 4
0
        private ScheduledTask AddTaskImpl(
            string name,
            Schedule schedule,
            ScheduledTaskCallback callback,
            ScheduledTaskAsyncCallback asyncCallback,
            bool autoRun,
            DateTimeOffset lastKnownEvent,
            TimeSpan window)
        {
            if (schedule == null)
                throw new ArgumentNullException(nameof(schedule));

            if (name == null)
                name = Guid.NewGuid().ToString();
            
            ScheduledTask task;
            lock (_lockTasks)
            {
                if (IsShuttingDown)
                    throw new Exception("Cannot add a task to Schtick after Shutdown() has been called.");

                if (_tasks.ContainsKey(name))
                    throw new Exception($"A scheduled task named \"{name}\" already exists.");

                task = new ScheduledTask(this, name, schedule, callback, asyncCallback)
                {
                    Window = window,
                    IsAttached = true,
                };

                _tasks.Add(name, task);
            }

            task.OnException += TaskOnOnException;

            if (autoRun)
                task.StartSchedule(lastKnownEvent);

            return task;
        }