コード例 #1
0
        /// <summary>
        /// 读取在时间范围内,没有执行过且没有正在运行任务的作业。然后转换为任务并且入库
        /// </summary>
        /// <param name="batchCount"></param>
        /// <param name="timeOffset"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public SysTaskCollection FetchNotDispatchedJobsAndConvertToTask(int batchCount, TimeSpan timeOffset, Action <JobBase, SysTask> action)
        {
            SysTaskCollection result = new SysTaskCollection();

            FetchNotDispatchedJobs(batchCount, timeOffset, job =>
            {
                JobSchedule matchedSchedule = null;

                if (job.CanStart(timeOffset, out matchedSchedule))
                {
                    SysTask task = job.ToSysTask();

                    task.FillData(BuildTaskExtraData(job, timeOffset, matchedSchedule));

                    job.SetCurrentJobBeginStatus();
                    SysTaskAdapter.Instance.Update(task);

                    if (action != null)
                    {
                        action(job, task);
                    }

                    result.Add(task);
                }
            });

            return(result);
        }
コード例 #2
0
ファイル: SysTaskCommon.cs プロジェクト: wooln/AK47Source
        public static int ExecuteAllTasks()
        {
            int       count = 0;
            Stopwatch sw    = new Stopwatch();

            sw.Start();

            try
            {
                SysTaskCollection tasks = null;
                do
                {
                    tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(-1, (task) =>
                    {
                        ExecuteAndAssertTask(task);
                    });

                    count += tasks.Count;
                }while (tasks.Count > 0);
            }
            finally
            {
                sw.Stop();
                Console.WriteLine("总共执行了{0}个任务,耗时{1:#,##0}毫秒", count, sw.ElapsedMilliseconds);
            }

            return(count);
        }
コード例 #3
0
        protected void ExecuteAllClick(object sender, EventArgs e)
        {
            try
            {
                ProcessProgress.Current.RegisterResponser(SubmitButtonProgressResponser.Instance);

                SysTaskCollection tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(20, null);

                ProcessProgress.Current.MinStep     = 0;
                ProcessProgress.Current.MaxStep     = tasks.Count;
                ProcessProgress.Current.CurrentStep = 0;

                ProcessProgress.Current.Response();

                while (tasks.Count > 0)
                {
                    foreach (SysTask task in tasks)
                    {
                        SysTaskSettings.GetSettings().GetExecutor(task.TaskType).Execute(task);

                        ProcessProgress.Current.Increment();
                        ProcessProgress.Current.Response();
                    }

                    tasks = SysTaskAdapter.Instance.FetchNotRuningSysTasks(20, null);

                    ProcessProgress.Current.MaxStep += tasks.Count;
                    ProcessProgress.Current.Response();
                }

                this.InnerRefreshList();
            }
            catch (System.Exception ex)
            {
                WebUtility.ResponseShowClientErrorScriptBlock(ex);
            }
            finally
            {
                this.ResponseCompletedScript();
            }
        }
コード例 #4
0
        public void GenerateInvokeWebServiceJobTaskTest()
        {
            JobBaseAdapter.Instance.ClearAll();
            JobScheduleAdapter.Instance.ClearAll();
            SysTaskAdapter.Instance.ClearAll();

            JobSchedule schedule = CreateSingleTimeSchedule();

            JobScheduleAdapter.Instance.Update(schedule);

            for (int i = 0; i < 40; i++)
            {
                InvokeWebServiceJob job = (InvokeWebServiceJob)CreateInvokeServiceJob();
                job.Name = "即时调用服务" + i;
                job.Schedules.Add(schedule);

                InvokeWebServiceJobAdapter.Instance.Update(job);
            }

            SysTaskCollection sysTasks = new SysTaskCollection();

            List <Task> tasks = new List <Task>();

            for (int i = 0; i < 1; i++)
            {
                Task task = Task.Factory.StartNew(() =>
                                                  JobBaseAdapter.Instance.FetchNotDispatchedJobsAndConvertToTask(40, TimeSpan.FromSeconds(60), (job, t) => sysTasks.Add(t)));

                tasks.Add(task);
            }

            Task.WaitAll(tasks.ToArray());

            Assert.AreEqual(40, sysTasks.Count);

            sysTasks.ForEach(st => Console.WriteLine(st.TaskTitle));
        }
コード例 #5
0
ファイル: JobTest.cs プロジェクト: jerryshi2007/AK47Source
		public void GenerateInvokeWebServiceJobTaskTest()
		{
			JobBaseAdapter.Instance.ClearAll();
			JobScheduleAdapter.Instance.ClearAll();
			SysTaskAdapter.Instance.ClearAll();

			JobSchedule schedule = CreateSingleTimeSchedule();
			JobScheduleAdapter.Instance.Update(schedule);

			for (int i = 0; i < 40; i++)
			{
				InvokeWebServiceJob job = (InvokeWebServiceJob)CreateInvokeServiceJob();
				job.Name = "即时调用服务" + i;
				job.Schedules.Add(schedule);

				InvokeWebServiceJobAdapter.Instance.Update(job);
			}

			SysTaskCollection sysTasks = new SysTaskCollection();

			List<Task> tasks = new List<Task>();

			for (int i = 0; i < 1; i++)
			{
				Task task = Task.Factory.StartNew(() =>
					JobBaseAdapter.Instance.FetchNotDispatchedJobsAndConvertToTask(40, TimeSpan.FromSeconds(60), (job, t) => sysTasks.Add(t)));

				tasks.Add(task);
			}

			Task.WaitAll(tasks.ToArray());

			Assert.AreEqual(40, sysTasks.Count);

			sysTasks.ForEach(st => Console.WriteLine(st.TaskTitle));
		}