Ejemplo n.º 1
0
        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;
                }
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }