使用windows调度任务及时调用控制台应用程序.这是一种有效的方法吗

本文关键字:一种 有效 方法 任务 调度 windows 应用程序 控制台 调用 使用 | 更新日期: 2023-09-27 18:30:00

这是关于ASP.NET MVC背景的。当我需要及时调用操作方法时,我会使用HangFire这样的第三方工具,它在应用程序池下运行。我想创建一个同步作业,它读取由我们的ERP系统生成的.csv文件,并更新我们的自定义数据库
但我知道,在我的ASP.NET MVC中使用这个同步作业作为操作方法不是正确的做法,因为后台作业不应该是我的web应用程序的一部分。

因此,为了处理我的同步工作,我做了以下操作:

  1. 使用Visual studio 2012,我创建了一个新的控制台应用程序,在其主要方法中,我编写了如下同步作业:-

    class Program
    {
        static void Main(string[] args)
        {
            using (Entities sd = new Entities())
            {
                //code goes here
                sd.SaveChanges();
            }
        }
    }
    
  2. 如何及时调用此控制台应用程序?我正在考虑使用windows任务调度程序创建一个新任务,它将每小时执行一次,并调用应用程序,主要调用.application文件

使用windows调度任务及时调用控制台应用程序.这是一种有效的方法吗

现在我的问题是如何及时调用这个控制台应用程序。我正在考虑使用windows任务调度程序创建一个新任务,它将每小时执行一次,并调用应用程序,主要调用.application文件?

运行程序是Windows任务调度程序(TS)的目标之一。所以,请使用TS。

使用TS的其他好处是:

  • 能够指定运行流程的用户帐户
  • 指定任务应在何时运行的触发器的多种方法
  • 控制任务是否应该运行的条件机制(计算机空闲;节能)
  • 运行时任务的历史记录非常好

另一种选择是创建自己的调度服务来运行您的应用程序,但这样的选择是不受欢迎的,因为:

  1. 车轮的改造
  2. Windows充斥着大量的专有任务调度服务,这些服务本质上都在做同样的事情

Web应用程序中的后台作业

尽管可以说在ASP.NET中生成/调度后台线程/工作项来调用一些c#代码,但这里的危险在于IIS不知道你已经这样做了。它可能会因为web不活动而决定挂起或回收你的应用程序池,然后你调度的作业将被发送到无效状态。因此不推荐使用。

现在你可以随时告诉IIS不要让你的应用程序池超时,这样它就不会定期回收,但我怀疑这会导致其他问题。

最好一开始就不要这么做。

但是,ASP.NET使用任务调度程序API来调度操作以运行控制台应用程序并没有错。

Windows任务调度程序是调用.net控制台应用程序的一种非常有效的方法。我写了几篇我支持的文章,这些文章已经运行了多年,没有任何问题。

相关文章: