我正在进行的项目需要在特定时间完成一些执行。我不确定处理这种情况的最佳方法是什么。该方法必须能够在服务器重新启动/维护后继续存在。并且方法调用必须以编程方式进行。
我正在考虑走这条路:
我可以在数据库(甚至是消息队列)中有一个名为 TaskTable 的表,它可以有 TaskID(PK)、TaskName(varchar)、TaskStatus(enum success、failed、scheduled) 和 TimeOfExecution。但我需要一个定期轮询数据库以查找任何未执行任务的 Windows 服务。我面临的问题是:我用什么作为 TaskName 来保存到数据库中?班级名称?类和方法名 ToString?以及如何将字符串转换回来并以编程方式调用方法调用(我不想有一个巨大的 switch 语句)?一个典型的任务如下所示。所以我需要能够获取任务“SendIncompleteNotification”的名称和类名将其保存到数据库中,并在检索时以编程方式调用
public static Task<string> SendIncompleteNotification
{
get
{
return new Task<string>
(
a => Console.WriteLine("Sample Task")
, "This is a sample task which does nothing."
);
}
}
现在的问题是我在以编程方式保存方法/属性名称时遇到问题。
var type = ApplicationTask.SendIncompleteNotification.GetType();
//type.Name shows "Task`1" rather than SendIncompleteNotification
有没有更好的方法来处理这种情况?谢谢!
更新:对不起,我的头在旋转。我现在意识到我做错了什么是有另一种方法/属性来返回我的任务。我应该做的是从我的任务中继承一个新的类。在那里我可以轻松地获取类名并将字符串保存到数据库中,然后再返回并调用。