Ejemplo n.º 1
0
        private Action <DateTime> _CreateAction(CrontabTask task)
        {
            if (task == null)
            {
                throw new ArgumentNullException(nameof(task));
            }

            var typeInstance = _typeInstanceCreator(task.Method);

            return(time => { _TryRun(time, task, typeInstance); });
        }
Ejemplo n.º 2
0
        public void AddTask(CrontabTask task)
        {
            if (task == null)
            {
                throw new ArgumentNullException(nameof(task));
            }
            if (task.Schedule == null)
            {
                throw new ArgumentException("argument \"task.Schedule\" is null", nameof(task.Schedule));
            }

            if (task.Action == null)
            {
                var action = _CreateAction(task);

                task.Action = action;
            }

            _cronTasks.Add(task);
        }
Ejemplo n.º 3
0
        private void _TryRun(DateTime time, CrontabTask task, object typeInstance)
        {
            var method = task.Method;

            task.LastExecuteTime = time;
            task.Status          = CrontabTaskStatus.Running;

            try
            {
                switch (task.Parameters.Length)
                {
                case 0:
                    method.Invoke(typeInstance, null);
                    break;

                case 1:
                    method.Invoke(typeInstance, new object[] { time });
                    break;

                case 2:
                    method.Invoke(typeInstance, new object[] { time, task });
                    break;

                case 3:
                    method.Invoke(typeInstance, new object[] { time, task, this });
                    break;

                default:
                    throw new ArgumentException("the number of task parameters is incorrect.");
                }
            }
            catch
            {
                task.Status = CrontabTaskStatus.Failing;
            }
        }