Как запустить запланированные задачи в саду?

Я должен запускать автоматизированную работу каждые 5 часов.

Я нашел этот пост о том, как создавать запланированные задачи, используя IScheduledTaskHandler и IScheduledTaskManager. Запланированные задачи с использованием Orchard CMS

Я скопировал тот же код, я добавил свой сервисный вызов внутри функции Process. Компилируется нормально. Но я не уверен, что мне нужно «начинать»; это запланированное задание, как запуск службы Windows. Получается ли он автоматически после того, как я соберу решение? Когда часы начинают тикать, если я хочу запустить эту работу через 5 часов? И если я хочу остановиться / сделать паузу, как я могу это сделать?

Благодарю.

РЕДАКТИРОВАТЬ:

Я получаю исключение, если я пытаюсь включить пользовательский модуль с обработчиком задач.

Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: источник

Line 241: var shellContext = _shellContexts.FirstOrDefault(c => c.Settings.Name == settings.Name);

Исходный файл: \ orchard-1.4 \ src \ Orchard \ Environment \ DefaultOrchardHost.cs Строка: 241

_ShellContexts становится пустым. Если я удаляю класс обработчика задач из проекта / модуля, все работает нормально.

Вот код обработчика задачи.

public class ScheduledTaskHandler : IScheduledTaskHandler
{
    private const string TaskType = "MyTaskUniqueID";
    private readonly IScheduledTaskManager _taskManager;
    private readonly IMyService _myService;

    public ILogger Logger { get; set; }

    public ScheduledTaskHandler(IScheduledTaskManager taskManager, IMyService myService)
    {
        _myService = myService;
        _taskManager = taskManager;
        Logger = NullLogger.Instance;
        try
        {
            DateTime firstDate = new DateTime().AddMinutes(5);
            ScheduleNextTask(firstDate);
        }
        catch (Exception e)
        {
            this.Logger.Error(e, e.Message);
        }
    }

    public void Process(ScheduledTaskContext context)
    {
        if (context.Task.TaskType == TaskType)
        {
            try
            {
                _myService.RunJob();
            }
            catch (Exception e)
            {
                this.Logger.Error(e, e.Message);
            }
            finally
            {
                DateTime nextTaskDate = new DateTime().AddHours(5);
                ScheduleNextTask(nextTaskDate);
            }
        }
    }

    private void ScheduleNextTask(DateTime date)
    {
        if (date > DateTime.UtcNow)
        {
            var tasks = this._taskManager.GetTasks(TaskType);
            if (tasks == null || tasks.Count() == 0)
                this._taskManager.CreateTask(TaskType, date, null);
        }
    }


}

Ответы на вопрос(3)

Ваш ответ на вопрос