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