我必须运行一个自动化的工作每5小时。
我发现了如何创建计划任务,使用IScheduledTaskHandler和IScheduledTaskManager这个职位。 利用果园CMS计划任务
我复制了相同的代码,我加入了过程的功能在我的服务电话。 它编译罚款。 但我不知道我是否有“启动”此计划的任务,就像一个窗口服务的开始。 是否得到自动拾取后我构建解决方案? 什么时候时钟开始计时,如果我想在运行5小时这份工作? 如果我想停止/暂停,我该怎么办呢?
谢谢。
编辑:
如果我尝试启用与任务处理程序中的自定义模块我得到一个例外。
异常详细信息:System.ArgumentNullException:值不能为空。 参数名:源
Line 241: var shellContext = _shellContexts.FirstOrDefault(c => c.Settings.Name == settings.Name);
源文件:\果园1.4的\ src \果园\环境\ 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);
}
}
}