使用windows调度任务及时调用控制台应用程序.这是一种有效的方法吗
本文关键字:一种 有效 方法 任务 调度 windows 应用程序 控制台 调用 使用 | 更新日期: 2023-09-27 18:30:00
这是关于ASP.NET MVC背景的。当我需要及时调用操作方法时,我会使用HangFire这样的第三方工具,它在应用程序池下运行。我想创建一个同步作业,它读取由我们的ERP系统生成的.csv文件,并更新我们的自定义数据库
但我知道,在我的ASP.NET MVC中使用这个同步作业作为操作方法不是正确的做法,因为后台作业不应该是我的web应用程序的一部分。
因此,为了处理我的同步工作,我做了以下操作:
-
使用Visual studio 2012,我创建了一个新的控制台应用程序,在其主要方法中,我编写了如下同步作业:-
class Program { static void Main(string[] args) { using (Entities sd = new Entities()) { //code goes here sd.SaveChanges(); } } }
- 如何及时调用此控制台应用程序?我正在考虑使用windows任务调度程序创建一个新任务,它将每小时执行一次,并调用应用程序,主要调用.application文件
现在我的问题是如何及时调用这个控制台应用程序。我正在考虑使用windows任务调度程序创建一个新任务,它将每小时执行一次,并调用应用程序,主要调用.application文件?
运行程序是Windows任务调度程序(TS)的目标之一。所以是,请使用TS。
使用TS的其他好处是:
- 能够指定运行流程的用户帐户
- 指定任务应在何时运行的触发器的多种方法
- 控制任务是否应该运行的条件机制(计算机空闲;节能)
- 运行时任务的历史记录非常好
另一种选择是创建自己的调度服务来运行您的应用程序,但这样的选择是不受欢迎的,因为:
- 车轮的改造
- Windows充斥着大量的专有任务调度服务,这些服务本质上都在做同样的事情
Web应用程序中的后台作业
尽管可以说在ASP.NET中生成/调度后台线程/工作项来调用一些c#代码,但这里的危险在于IIS不知道你已经这样做了。它可能会因为web不活动而决定挂起或回收你的应用程序池,然后你调度的作业将被发送到无效状态。因此不推荐使用。
现在你可以随时告诉IIS不要让你的应用程序池超时,这样它就不会定期回收,但我怀疑这会导致其他问题。
最好一开始就不要这么做。
但是,ASP.NET使用任务调度程序API来调度操作以运行控制台应用程序并没有错。
Windows任务调度程序是调用.net控制台应用程序的一种非常有效的方法。我写了几篇我支持的文章,这些文章已经运行了多年,没有任何问题。