我有一个C#应用程序,它执行一些维护任务.它需要大约每小时运行一次,但如果它有点偏差则不太重要.它必须在没有用户登录的Win2003服务器上运行.
基本上我想知道我是否应该写一个Windows服务,如果是的话,如果Thread.Sleep()是一个暂停线程一小时的正确方法,或者是否有更好的方法来确保线程保持空闲并且不放任何服务器负载?(又名.与Spinlock最相反的是什么)
另一种选择是Windows任务计划程序,但我不确定这是否适合服务器使用,因为a)我必须将计划存储在其中,而不是存储在我的app.config中,b)我无法轻易控制服务启动/停止/重启c)我不知道Windows用户的凭据是否与在Service MMC Snapin中输入时一样安全.
你有什么看法?拥有空闲服务是否可能有用,或者您是否建议使用任务调度程序?
您可能会发现此视频很有趣.对负责Windows服务的工程师的良好采访,以及何时选择服务或任务.简而言之,如果您的功能属于定期维护类别,请执行任务.
我自己更喜欢任务计划程序,因为如果需要,它更容易维护和更改计划.
此外,如果开发人员"忘记"执行诸如关闭连接,文件等可能随着时间的推移而积累的事情,那么持续运行并"休眠"的实用程序会冒着导致问题的风险.让程序"运行和退出"是一个额外的安全毯.:-)