model-view-controller - 使用 Orchard CMS 的计划任务

标签 model-view-controller orchardcms

我需要使用 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/

相关文章:

c# - DataTables MVC 回发数据为空

基于页面的布局 - OrchardCMS

.net - orchard cms 在 cms 中创建页面

permissions - Orchard CMS 需要什么权限?

JavaFX 8 : Separation of model/domain from view

javascript - Backbone.js - 如何将非状态 "event"从一个 View 发送到另一个 View ?

ios - 无法从 View Controller 到模型进行通信

c# - 您可以将 CMS Orchard 与您自己的 ASP.NET 网站一起使用吗?

asp.net-mvc - 计划将 https 用于 MVC 网站(使用域/子域)——最佳实践?

php - MVC - 子文件夹 Controller