public void execute(DateTime date_time) { var runTime = date_time; if (timeZoneInfo != null) { runTime = TimeZoneInfo.ConvertTime(date_time, timeZoneInfo); } var needJobQueue = runMode != CronJobRunMode.RunOneInstance; lock (_lock) { if (needJobQueue) { cleanActiveJobTaskQueue(); if (activeJobTaskQueue.Count >= this.jobTaskQueueUpperLimit) { return; } } if (!_cron_schedule.isTime(runTime)) { return; } switch (runMode) { case CronJobRunMode.RunOneInstance: abort(); _task = Task.Factory.StartNew(_job_action, cancelToken.Token); return; case CronJobRunMode.RunInParallel: activeJobTaskQueue.Add(_task); _task = Task.Factory.StartNew(_job_action, cancelToken.Token); activeJobTaskQueue.Add(_task); return; case CronJobRunMode.RunInQueue: var lastTaskInQueue = activeJobTaskQueue.LastOrDefault(); if (lastTaskInQueue != null) { _task = lastTaskInQueue.ContinueWith((preTask) => { _job_action(); }, cancelToken.Token); } else { _task = Task.Factory.StartNew(_job_action, cancelToken.Token); } activeJobTaskQueue.Add(_task); return; } } }
public void execute(DateTime date_time) { lock (_lock) { if (!_cron_schedule.isTime(date_time)) { return; } if (_thread.ThreadState == ThreadState.Running) { return; } _thread = new Thread(_thread_start); _thread.Start(); } }