Fáb*_*nes 19 c# timer scheduled-tasks
我想在特定时间调用我的C#应用程序上的特定函数.起初我想过使用a Timer (System.Time.Timer),但很快就无法使用了.为什么?
简单.Timer类需要一个Interval毫秒,但考虑到我可能希望执行该函数,让我们在一周内说,这意味着:
现在让我们记住,Interval接受的数据类型是int,并且我们知道int范围从-2,147,483,648到2,147,483,647.
这使得Timer无用,不是在这种情况下,但是在超过25天的情况下,一旦我们无法设置Interval更大的2,147,483,647毫秒.
所以我需要一个解决方案,我可以指定何时应该调用该函数.像这样的东西:
solution.ExecuteAt = "30-04-2010 15:10:00";
solution.Function = "functionName";
solution.Start();
Run Code Online (Sandbox Code Playgroud)
因此,当系统时间到达"30-04-2010 15:10:00"时,该功能将在应用程序中执行.
怎样才能解决这个问题?
附加信息:这些功能将起什么作用?
编辑:
这似乎是在Interval接受数据类型double,但是如果你设置的值越大,一个int到Interval,并调用Start()它抛出一个异常[0, Int32.MaxValue].
编辑2:
JørnSchou -Rode建议使用Ncron来处理调度任务,起初看起来这似乎是一个很好的解决方案,但我想听听一些使用它的人.
Jør*_*ode 10
任务调度的一种方法,与klausbyskov提出的方法相似,就是在现有的.NET调度框架/库之上构建调度服务.与使用Windows任务计划程序相比,这具有以下优点:(a)允许在同一项目中定义多个作业,以及(b)将作业和调度逻辑"保持在一起" - 即不依赖于容易丢失的服务器设置系统升级/更换.
我知道有两个提供这种功能的开源项目:
" Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统." 我自己从未实际使用过这个框架,但是通过研究网站,我得到了一个非常可靠的工具的印象,提供了许多很酷的功能.[quartz-net]Stackoverflow 上有标记的事实也可能表明它实际上是在野外使用的.
" NCron是一个轻量级的库,用于在.NET服务器平台上构建和部署预定的后台作业." 它没有Quartz.NET的一半多的功能,并且它在Stackoverflow上没有任何标签,但作者(你的确)认为它的低摩擦API使它更容易上手.
在NCron之上构建您的调度服务,您可以CleanupJob使用一行代码安排每周执行:
service.Weekly().Run<CleanupJob>();
Run Code Online (Sandbox Code Playgroud)
好吧,你需要大约三行锅炉板代码来实际将你的项目变成一个Windows服务,但是当我声称它可以用一行代码完成时听起来更令人印象深刻;)
| 归档时间: |
|
| 查看次数: |
17647 次 |
| 最近记录: |