public ActionResult RunNow(int id) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageScheduleTasks)) return AccessDeniedView(); try { var scheduleTask = _scheduleTaskService.GetTaskById(id); if (scheduleTask == null) throw new Exception("Schedule task cannot be loaded"); var task = new Task(scheduleTask); //ensure that the task is enabled task.Enabled = true; //do not dispose. otherwise, we can get exception that DbContext is disposed task.Execute(true, false, false); SuccessNotification(_localizationService.GetResource("Admin.System.ScheduleTasks.RunNow.Done")); } catch (Exception exc) { ErrorNotification(exc); } return RedirectToAction("List"); }
/// <summary> /// Initializes the task manager with the property values specified in the configuration file. /// </summary> public void Initialize() { this._taskThreads.Clear(); var taskService = EngineContext.Current.Resolve<IScheduleTaskService>(); var scheduleTasks = taskService.GetAllTasks().ToList().OrderBy(x => x.Seconds); //group by threads with the same seconds foreach (var scheduleTaskGrouped in scheduleTasks.GroupBy(x => x.Seconds)) { //create a thread var taskThread = new TaskThread(); taskThread.Seconds = scheduleTaskGrouped.Key; this._taskThreads.Add(taskThread); foreach (var scheduleTask in scheduleTaskGrouped) { var task = new Task(scheduleTask); taskThread.AddTask(task); } } //one thread, one task //foreach (var scheduleTask in scheduleTasks) //{ // var taskThread = new TaskThread(scheduleTask); // this._taskThreads.Add(taskThread); // var task = new Task(scheduleTask); // taskThread.AddTask(task); //} }
public virtual async Task <IActionResult> RunNow(int id) { if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageScheduleTasks)) { return(AccessDeniedView()); } try { //try to get a schedule task with the specified id var scheduleTask = await _scheduleTaskService.GetTaskByIdAsync(id) ?? throw new ArgumentException("Schedule task cannot be loaded", nameof(id)); //ensure that the task is enabled var task = new Task(scheduleTask) { Enabled = true }; await task.ExecuteAsync(true, false); _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.System.ScheduleTasks.RunNow.Done")); } catch (Exception exc) { await _notificationService.ErrorNotificationAsync(exc); } return(RedirectToAction("List")); }
/// <summary> /// Initializes the task manager with the property values specified in the configuration file. /// </summary> public void Initialize() { this._taskThreads.Clear(); var taskService = EngineContext.Current.Resolve<IScheduleTaskService>(); var scheduleTasks = taskService .GetAllTasks() .OrderBy(x => x.Seconds) .ToList(); //group by threads with the same seconds foreach (var scheduleTaskGrouped in scheduleTasks.GroupBy(x => x.Seconds)) { //create a thread var taskThread = new TaskThread { Seconds = scheduleTaskGrouped.Key }; foreach (var scheduleTask in scheduleTaskGrouped) { var task = new Task(scheduleTask); taskThread.AddTask(task); } this._taskThreads.Add(taskThread); } //sometimes a task period could be set to several hours (or even days). //in this case a probability that it'll be run is quite small (an application could be restarted) //we should manually run the tasks which weren't run for a long time var notRunTasks = scheduleTasks //find tasks with "run period" more than 30 minutes .Where(x => x.Seconds >= _notRunTasksInterval) .Where(x => !x.LastStartUtc.HasValue || x.LastStartUtc.Value.AddSeconds(x.Seconds) < DateTime.UtcNow) .ToList(); //create a thread for the tasks which weren't run for a long time if (notRunTasks.Count > 0) { var taskThread = new TaskThread { RunOnlyOnce = true, Seconds = 60 * 5 //let's run such tasks in 5 minutes after application start }; foreach (var scheduleTask in notRunTasks) { var task = new Task(scheduleTask); taskThread.AddTask(task); } this._taskThreads.Add(taskThread); } }
public virtual async Task <IActionResult> RunTask(string taskType) { var scheduleTask = await _scheduleTaskService.GetTaskByTypeAsync(taskType); if (scheduleTask == null) { //schedule task cannot be loaded return(NoContent()); } var task = new Task(scheduleTask); await task.ExecuteAsync(); return(NoContent()); }
/// <summary> /// Initializes the task manager with the property values specified in the configuration file. /// </summary> public void Initialize() { this._taskThreads.Clear(); var taskService = EngineContext.Current.Resolve<IScheduleTaskService>(); var scheduleTasks = taskService.GetAllTasks().ToList().OrderBy(x => x.Seconds); foreach (var scheduleTask in scheduleTasks) { //one thread, one task var taskThread = new TaskThread(scheduleTask); this._taskThreads.Add(taskThread); var task = new Task(scheduleTask); taskThread.AddTask(task); } }
internal void ProcessException(Task task, Exception exception) { try { //process exception code here } catch { } }