/// <summary> /// 重置某一定时服务 /// </summary> /// <param name="taskId"></param> public void ResetDbTask(string taskId) { if (DbTimers.ContainsKey(taskId)) { DbTimers[taskId].Dispose(); DbTimers.Remove(taskId); } TaskStatus[taskId] = false; if (timedTaskProvider != null) { var task = timedTaskProvider.GetTaskById(taskId); if (task != null && task.IsEnabled) { if (string.IsNullOrEmpty(task.Identifier)) { return; } var clazzName = task.Identifier.Substring(0, task.Identifier.LastIndexOf('.')); var functionName = task.Identifier.Substring(task.Identifier.LastIndexOf('.') + 1); var clazz = JobTypeCollection.SingleOrDefault(x => x.FullName == clazzName); if (clazz == null) { return; } var method = clazz.GetMethod(functionName); if (method == null) { return; } //需要延时的时间 int delta = 0; if (task.BeginTime == default(DateTime)) { task.BeginTime = DateTime.Now; } else { delta = Convert.ToInt32((task.BeginTime - DateTime.Now).TotalMilliseconds); } if (delta < 0) { delta = delta % task.Interval; if (delta < 0) { delta += task.Interval; } } Task.Factory.StartNew(() => { var timer = new Timer(t => { Execute(task, clazz, method); }, null, delta, task.AutoReset ? task.Interval : 0); DbTimers.Add(task.Id, timer); }); } } }
public override async Task InitializeAsync(object navigationData) { var pop = await _dialogService.OpenLoadingPopup(); InitDataFilter = await _iDDLService.GetInitDataFilter(); JobTypeCollection = InitDataFilter.JobTypeDLL.Cast <object>().ToObservableCollection(); CategoryCollection = InitDataFilter.ClassificationDLL.Cast <object>().ToObservableCollection(); LocationCollection = InitDataFilter.LocationDDL.Cast <object>().ToObservableCollection(); PositionCollection = InitDataFilter.PositionDLL.Cast <object>().ToObservableCollection(); SkillCollection = InitDataFilter.SkillsDLL.Cast <object>().ToObservableCollection(); QualificationCollection = InitDataFilter.QualificationDLL.Cast <object>().ToObservableCollection(); LicenceCollection = InitDataFilter.TicketsDLL.Cast <object>().ToObservableCollection(); dynamic objSearchDifinition = await _candidateExploreService.GetSavedSearchDefinition(); if (objSearchDifinition["parameter"] != null) { string[] jobTypeIds = objSearchDifinition["parameter"]["JobTypeIds"].ToString().Split(','); JobTypeSelected = new ObservableCollection <object>(JobTypeCollection.Where(x => Array.IndexOf(jobTypeIds, (x as LookupItem).Id) >= 0)); string[] categoryIds = objSearchDifinition["parameter"]["CategoryIds"].ToString().Split(','); CategorySelected = new ObservableCollection <object>(CategoryCollection.Where(x => Array.IndexOf(categoryIds, (x as LookupItem).Id) >= 0)); string[] locationIds = objSearchDifinition["parameter"]["LocationIds"].ToString().Split(','); LocationSelected = new ObservableCollection <object>(LocationCollection.Where(x => Array.IndexOf(locationIds, (x as LookupItem).Id) >= 0)); string[] positionIds = objSearchDifinition["parameter"]["PositionIds"].ToString().Split(','); PositionSelected = new ObservableCollection <object>(PositionCollection.Where(x => Array.IndexOf(positionIds, (x as LookupItem).Id) >= 0)); string[] skillIds = objSearchDifinition["parameter"]["SkillsIds"].ToString().Split(','); SkillSelected = new ObservableCollection <object>(SkillCollection.Where(x => Array.IndexOf(skillIds, (x as LookupItem).Id) >= 0)); string[] qualificationIds = objSearchDifinition["parameter"]["QualificationsIds"].ToString().Split(','); QualificationSelected = new ObservableCollection <object>(QualificationCollection.Where(x => Array.IndexOf(qualificationIds, (x as LookupItem).Id) >= 0)); string[] licenceIds = objSearchDifinition["parameter"]["TicketLicensesIds"].ToString().Split(','); LicenceSelected = new ObservableCollection <object>(LicenceCollection.Where(x => Array.IndexOf(licenceIds, (x as LookupItem).Id) >= 0)); } else { JobTypeSelected = new ObservableCollection <object>(); CategorySelected = new ObservableCollection <object>(); LocationSelected = new ObservableCollection <object>(); PositionSelected = new ObservableCollection <object>(); SkillSelected = new ObservableCollection <object>(); QualificationSelected = new ObservableCollection <object>(); LicenceSelected = new ObservableCollection <object>(); } await _dialogService.CloseLoadingPopup(pop); }
public TimedTaskService(IAssemblyLocator locator, IServiceProvider services) { this.locator = locator; this.services = services; ILoggerFactory loggerFactory = new LoggerFactory() .AddConsole() .AddDebug(); this.logger = loggerFactory.CreateLogger <TimedTaskService>(); //this.logger = services.GetService<ILogger>(); this.timedTaskProvider = services.GetService <ITimedTaskProvider>(); this.timedTaskLogProvider = services.GetService <ITimedTaskProvider>(); var asm = locator.GetAssemblies(); foreach (var x in asm) { //查找带有TimedTaskAttribute的类 var types = x.DefinedTypes.Where(y => y.GetCustomAttribute(typeof(TimedTaskAttribute), true) != null); foreach (var type in types) { JobTypeCollection.Add(type); } } //取得所有方法 foreach (var clazz in JobTypeCollection) { var clazzTimedTaskAttr = clazz.GetCustomAttribute <TimedTaskAttribute>(); var clazzName = string.IsNullOrEmpty(clazzTimedTaskAttr.Name) ? clazz.Name : clazzTimedTaskAttr.Name; foreach (var method in clazz.DeclaredMethods.Where(x => x.GetCustomAttributes <InvokeAttribute>(true).Any())) { //取得所有Invoke配置 var invokes = method.GetCustomAttributes <InvokeAttribute>(true); foreach (var invoke in invokes.Where(i => i.IsEnabled && (i.ExpireTime >= DateTime.Now || i.ExpireTime == default(DateTime)))) { //需要延时的时间 long delta = 0; if (invoke.BeginTime == default(DateTime)) { invoke.BeginTime = DateTime.Now; } else { delta = Convert.ToInt64((invoke.BeginTime - DateTime.Now).TotalMilliseconds); } if (delta < 0) { delta = delta % invoke.Interval; if (delta < 0) { delta += invoke.Interval; } } Task.Factory.StartNew(() => { var invokeName = string.IsNullOrEmpty(invoke.Name) ? method.Name : invoke.Name; var task = new TimedTask(); task.Id = CryptHelper.EncryptMD5(clazzName + "." + invokeName); task.Name = clazzName + "." + invokeName; task.Identifier = clazz.FullName + "." + method.Name; task.BeginTime = invoke.BeginTime; task.ExpireTime = invoke.ExpireTime; task.Interval = invoke.Interval; task.AutoReset = invoke.AutoReset; task.IsEnabled = invoke.IsEnabled; var deltaSpan = new TimeSpan(delta * 10000); var IntervalSpan = new TimeSpan((invoke.AutoReset ? invoke.Interval : 0) * 10000); var timer = new Timer(t => { Execute(task, clazz, method); }, null, deltaSpan, IntervalSpan); StaticTimers.Add(task.Id, timer); }); } } } ExecuteDbTask(); }
private void ExecuteDbTask() { //清除所有DB事务 if (DbTimers.Count > 0) { foreach (var dbTimer in DbTimers) { dbTimer.Value.Dispose(); TaskStatus[dbTimer.Key] = false; } DbTimers.Clear(); } //取得数据库配置的事务 if (timedTaskProvider != null) { var tasks = timedTaskProvider.GetTasks(); foreach (var task in tasks) { if (string.IsNullOrEmpty(task.Identifier)) { continue; } var clazzName = task.Identifier.Substring(0, task.Identifier.LastIndexOf('.')); var functionName = task.Identifier.Substring(task.Identifier.LastIndexOf('.') + 1); var clazz = JobTypeCollection.SingleOrDefault(x => x.FullName == clazzName); var method = clazz?.GetMethod(functionName); if (method == null) { continue; } //需要延时的时间 long delta = 0; if (task.BeginTime == default(DateTime)) { task.BeginTime = DateTime.Now; } else { delta = Convert.ToInt64((task.BeginTime - DateTime.Now).TotalMilliseconds); } if (delta < 0) { delta = delta % task.Interval; if (delta < 0) { delta += task.Interval; } } Task.Factory.StartNew(() => { var deltaSpan = new TimeSpan(delta * 10000); var IntervalSpan = new TimeSpan((task.AutoReset ? task.Interval : 0) * 10000); var timer = new Timer(t => { Execute(task, clazz, method); }, null, deltaSpan, IntervalSpan); DbTimers.Add(task.Id, timer); }); } } }