.NET程序集中的C#计划任务属性化方法

.NET程序集中的C#计划任务属性化方法,c#,asp.net,C#,Asp.net,我经常发现,当我编写服务类(在ASP.NET应用程序中)时,除了通常的方法调用之外,我还希望安排方法调用,例如每天凌晨1点调用 我的想法是创建一个自定义属性,用于任何计划任务方法: [ScheduledTask(Every=TimeSpans.Day, At=6)] public static void Cleanup() { // some clean up code here } 为了实现这一点,我必须在web应用程序的应用程序启动方法中扫描AppDomain中加载的程序集。查找具

我经常发现,当我编写服务类(在ASP.NET应用程序中)时,除了通常的方法调用之外,我还希望安排方法调用,例如每天凌晨1点调用

我的想法是创建一个自定义属性,用于任何计划任务方法:

[ScheduledTask(Every=TimeSpans.Day, At=6)]
public static void Cleanup()
{
    // some clean up code here
}
为了实现这一点,我必须在web应用程序的应用程序启动方法中扫描AppDomain中加载的程序集。查找具有ScheduledTask属性的静态方法,然后根据该属性调用调度程序来运行这些方法

我环顾了一下网络,发现似乎没有其他人做过这件事,我想知道出于某种原因,这通常是个坏主意!?你认为有可能吗

谢谢

我看到一些问题:

  • 关注点分离。您的类提供了
    清理
    实现和运行它的计划。管理员可能希望控制计划(例如,在活动较少时运行清理),因此更常见的做法是使用配置来提供计划

  • 管理员很难了解计划的任务

  • 附表的解释。您的示例是UTC 6还是当地时间

  • 易于修改计划-您需要重新编译

  • ASP.NET应用程序可以关闭,例如在一段时间不活动后,或按照预定义的计划关闭,并且在另一个请求到达之前不会再次启动。这使IIS成为运行计划任务的糟糕主机


感谢您的反馈。在SOC点上,你是对的,我需要将实际的计划分离到配置中,以维护SOC(不要认为属性本身违反SOC)。第二:是的,明白了。第三和第四:真的把时间表移到配置中,好吗。第五:它实际上是Azure,所以Web角色将继续在自己的线程中运行。谢谢!