首页 > 解决方案 > Kentico 计划任务在运行后不会自行删除

问题描述

我们有一个自定义代码创建一个成功运行后需要删除的计划任务。类似于时事通讯发送者任务。任务信息对象的“TaskDeleteAfterLastRun”属性设置为 true。成功运行后,任务仍在调度程序中。是否有清理这些任务的流程?或者,我们必须在 ITask Execute 方法中删除它吗?有任何想法吗?

这是代码片段。

TaskInfo taskInfo = new TaskInfo();
TaskInterval taskInterval = new TaskInterval()
{
    Period = "once",
    StartTime = smsMessage.SMSMessageScheduledSent
};

string str = TextHelper.LimitLength(smsMessage.SMSMessageName, 65, "...", false, CutTextEnum.End);

taskInfo.TaskDisplayName = $"Send SMS ({smsMessage.SMSMessageID}) '{str}'";
taskInfo.TaskName = $"SMS_{smsMessage.SMSMessageID}";
taskInfo.TaskAssemblyName = "XXXXX.XXX";
taskInfo.TaskClass = "XXXXX.XXX.XXXXXXXXXX";
taskInfo.TaskSiteID = SiteContext.CurrentSiteID;
taskInfo.TaskEnabled = true;
taskInfo.TaskDeleteAfterLastRun = true;
taskInfo.TaskData = smsMessage.SMSMessageID.ToString();
taskInfo.TaskInterval = SchedulingHelper.EncodeInterval(taskInterval);
taskInfo.TaskType = ScheduledTaskTypeEnum.System;
taskInfo.TaskNextRunTime = SchedulingHelper.GetFirstRunTime(taskInterval, null);
taskInfo.TaskLastResult = string.Empty;

TaskInfoProvider.SetTaskInfo(taskInfo);

标签: scheduled-taskskentico

解决方案


经过一些测试,我发现我计划的 ITask 正在返回一条消息,这似乎是导致此问题的原因。

public class MyTask : ITask
{
    public string Execute(TaskInfo task)
    {
        int messageId = ValidationHelper.GetInteger(task.TaskData,0);

        if (messageInfo != null && messageInfo.SMSMessageStatus < 2)
        {
            try
            {
                //Do something
            }
            catch (Exception ex)
            {
                EventLogProvider.LogException("MyTask", "Execute", ex);
                return ex.Message; //Failed
            }
        }
        return null; //Success
    }
}

推荐阅读