public bool RunScheduleTask()
        {
            if (ScheduleTask.IsRunning)
            {
                Notifier.Information(GetProgressInfo());
                return(true);
            }

            string scheduleTaskType = ScheduleTaskType;

            var task = AsyncRunner.Run((container, ct) =>
            {
                int taskId = 0;
                try
                {
                    var svc = container.Resolve <IScheduleTaskService>();

                    var scheduleTask = svc.GetTaskByType(scheduleTaskType);

                    if (scheduleTask == null)
                    {
                        throw new Exception("Schedule task cannot be loaded");
                    }

                    taskId = scheduleTask.Id;

                    var job     = new Job(scheduleTask);
                    job.Enabled = true;
                    job.Execute(ct, container, false);
                }
                catch (Exception)
                {
                    _scheduleTaskService.EnsureTaskIsNotRunning(taskId);
                }
            }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);

            task.Wait(100);

            if (task.IsCompleted)
            {
                if (!task.IsFaulted)
                {
                    Notifier.Success(GetResource("Admin.System.ScheduleTasks.RunNow.Completed"));
                }
                else
                {
                    var exc = task.Exception.Flatten().InnerException;
                    Notifier.Error(exc.Message);
                    Logger.Error(exc.Message, exc);
                }
            }
            else
            {
                Notifier.Information(GetResource("Admin.System.ScheduleTasks.RunNow.Progress"));
                return(true);
            }
            return(false);
        }
        public ActionResult RunJob(int id, string returnUrl = "")
        {
            if (!_permissionService.Authorize(StandardPermissionProvider.ManageScheduleTasks))
            {
                return(AccessDeniedView());
            }

            returnUrl = returnUrl.NullEmpty() ?? Request.UrlReferrer.ToString();

            var t = AsyncRunner.Run(c =>
            {
                try
                {
                    var svc = c.Resolve <IScheduleTaskService>();

                    var scheduleTask = svc.GetTaskById(id);
                    if (scheduleTask == null)
                    {
                        throw new Exception("Schedule task cannot be loaded");
                    }

                    var job     = new Job(scheduleTask);
                    job.Enabled = true;
                    job.Execute(c, false);
                }
                catch
                {
                    try
                    {
                        _scheduleTaskService.EnsureTaskIsNotRunning(id);
                    }
                    catch (Exception) { }
                }
            });

            // wait only 100 ms.
            t.Wait(100);

            if (t.IsCompleted)
            {
                if (!t.IsFaulted)
                {
                    NotifySuccess(T("Admin.System.ScheduleTasks.RunNow.Completed"));
                }
                else
                {
                    NotifyError(t.Exception.Flatten().InnerException);
                }
            }
            else
            {
                NotifyInfo(T("Admin.System.ScheduleTasks.RunNow.Progress"));
            }

            return(Redirect(returnUrl));
        }