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); }); }
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); }
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; } }