我需要使用 Orchard CMS 创建计划任务。
我有一个服务方法(假设它从外部来源加载一些数据),我需要每天早上 8:00 执行它。
我发现我必须使用 IScheduledTaskHandler 和 IScheduledTaskManager ... 有谁知道如何解决这个问题?一些示例代码将不胜感激。
最佳答案
在您的 IScheduledTaskHandler 中,您必须实现 Process 以提供您的任务实现(我建议您将您的实现放在另一个服务类中),并且您必须在任务管理器中注册您的任务。一次在Handler构造函数中注册第一个任务,然后在流程实现中,保证一个任务执行完,就调度下一个任务。
这是一个示例:
public class MyTaskHandler : IScheduledTaskHandler
{
private const string TaskType = "MyTaskUniqueID";
private readonly IScheduledTaskManager _taskManager;
public ILogger Logger { get; set; }
public MyTaskHandler(IScheduledTaskManager taskManager)
{
_taskManager = taskManager;
Logger = NullLogger.Instance;
try
{
DateTime firstDate = //Set your first task date (utc).
ScheduleNextTask(firstDate);
}
catch(Exception e)
{
this.Logger.Error(e,e.Message);
}
}
public void Process(ScheduledTaskContext context)
{
if (context.Task.TaskType == TaskType)
{
try
{
//Do work (calling an IService for instance)
}
catch (Exception e)
{
this.Logger.Error(e, e.Message);
}
finally
{
DateTime nextTaskDate = //Your next date (utc).
this.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);
}
}
}
关于model-view-controller - 使用 Orchard CMS 的计划任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916146/