scheduled-tasks - 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);
解决方案
经过一些测试,我发现我计划的 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
}
}
推荐阅读
- azure - 返回 Blob 文件 URI 的 Python 脚本
- ada - 如何使用泛型类型?
- python - 如何使用熊猫数据框 set_index()
- c# - 如何调试仅在 .NET Native 工具链中出现的 KernelBase.dll 中的异常
- sql - ORA-00936: Oracle 11g 中的 DELETE 语句和视图缺少表达式
- html - 如何将新的 { @class = "form-control } 添加到 MVC 视图
- javascript - 使用 joi 进行 Multer 验证
- kotlin - 在 Kotlin 中使用 Coroutine 时如何保证获取最新数据?
- mvvm - 我应该在哪里为 SwiftUI 中的视图创建模型实例?
- c++ - 我是否应该添加 c1 中的所有值以获得答案 10?