ASP.NET如何后台定时执行任务

时间:2021-05-07 08:00:11
比如说我现在数据库中有两个值s1和s2,想要在每天特定的一个时间让后台计算这两个值的比率:s1/s2,在后台要怎么实现呢,简单说就是实现一个功能,让后台定时执行一定得操作。

27 个解决方案

#1


SQLSERVER中使用作业
windows services定时
windows计划任务

#2


asp.net 里开线程

#3


asp.net 不是干这个的。asp.net 不能保证应用不被回收。

使用windows“计划任务”去执行一个后台控制台小程序是可以的。或者安装你的windows service应用。

#4


windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

#5


引用 4 楼 sp1234 的回复:
windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

我要实现一个网站系统后台自己在特定的时刻计算数据库中的数据,可以用windows计划?那我要写在哪个文件里

#6


引用 1 楼 xiaojie_cp 的回复:
SQLSERVER中使用作业
windows services定时
windows计划任务

请说的详细些

#7


引用 2 楼 yahle 的回复:
asp.net 里开线程

要如何实现

#8


网上找 window service  

#9


引用 8 楼 hanjun0612 的回复:
网上找 window service  

我是要在asp中写

#10


你能确定,你的网页永远开着?
如果不能确定,那你做不到

#11


计划任务,或windows service

#12


引用 6 楼 hyx_93 的回复:
Quote: 引用 1 楼 xiaojie_cp 的回复:

SQLSERVER中使用作业
windows services定时
windows计划任务

请说的详细些

三种实现方式,每一个都有相关的知识点,不是一两句能概括的。

#13


引用 4 楼 sp1234 的回复:
windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

如下代码写在Application_start事件中

            System.Timers.Timer timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(AddCount);

            //AddCount是一个方法,此方法就是每个1秒而做的事情
            timer.AutoReset = true;
            //给Application["timer"]一个初始值
            Application.Lock();
            Application["timer"] = 1;
             Application.UnLock();
            timer.Enabled = true;

然后自定义AddCount方法 格式如下:

      private void AddCount(object sender, ElapsedEventArgs e)
        {     

             Application.Lock();
             Application["timer"] = Convert.ToInt32(Application["timer"])+1;

           //这里写要执行的数据库操作
            Application.UnLock();
}
上面是写在Global.asax中的,你们觉得怎么样,不是我写的,是我借鉴别人的

#14


引用 13 楼 hyx_93 的回复:
Quote: 引用 4 楼 sp1234 的回复:

windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

如下代码写在Application_start事件中

            System.Timers.Timer timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(AddCount);

            //AddCount是一个方法,此方法就是每个1秒而做的事情
            timer.AutoReset = true;
            //给Application["timer"]一个初始值
            Application.Lock();
            Application["timer"] = 1;
             Application.UnLock();
            timer.Enabled = true;

然后自定义AddCount方法 格式如下:

      private void AddCount(object sender, ElapsedEventArgs e)
        {     

             Application.Lock();
             Application["timer"] = Convert.ToInt32(Application["timer"])+1;

           //这里写要执行的数据库操作
            Application.UnLock();
}

上面是写在Global.asax中的,你们觉得怎么样,不是我写的,是我借鉴别人的

嗯,这也是一种方法~~

#15


在 asp.net 中,根本不用访问从为了兼容 asp 而保留的 Application 集合。你直接声明一个
System.Timers.Timer timer 
就可以了。

不过不能保证 asp.net 进程不被回收。只是在你自己的电脑上玩玩儿而已。

#16


你直接声明一个
static System.Timers.Timer timer 
 就可以了,根本不用什么 Application 集合。

但是这不是重点。

#17


引用 16 楼 sp1234 的回复:
你直接声明一个
static System.Timers.Timer timer 
 就可以了,根本不用什么 Application 集合。

但是这不是重点。


引用 15 楼 sp1234 的回复:
在 asp.net 中,根本不用访问从为了兼容 asp 而保留的 Application 集合。你直接声明一个
System.Timers.Timer timer 
就可以了。

不过不能保证 asp.net 进程不被回收。只是在你自己的电脑上玩玩儿而已。

您的意思是什么?可以再详细点说一下吗

#18


关注。
楼主百度一下以下关键字组:有很多文章
asp.net static变量 回收

然后可以看一下这个链接
http://blog.csdn.net/cwj649956781/article/details/24666551

#19


quartz和hangfire,记得千万别host在iis上

#20


13楼方法可行。难道都忘记GC.KeepAlive了么

Global.asax
    void Application_Start(object sender, EventArgs e)
    {
            System.Timers.Timer aTimer = new System.Timers.Timer(120000);
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
            aTimer.AutoReset = true;
            GC.KeepAlive(aTimer);//关键点
    }

    void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {

    }


#21


Windows的计划任务+Console程序(Console程序没问题吧,计划任务去配置一下就行)

Windows Service(如果是定时任务,这个不推荐,Windows Service推荐应用于Socket Listen这种)

数据库的job(强烈推荐,省事一些)

哪一个都比Global.asax要方便

#22


引用 20 楼 feiyun_Web 的回复:
13楼方法可行。难道都忘记GC.KeepAlive了么

Global.asax
    void Application_Start(object sender, EventArgs e)
    {
            System.Timers.Timer aTimer = new System.Timers.Timer(120000);
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
            aTimer.AutoReset = true;
            GC.KeepAlive(aTimer);//关键点
    }

    void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {

    }

请问这里定时执行任务是怎么设置呢,比如我想每天凌晨2点执行数据库的操作,语句已经写好,

void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        System.Timers.Timer timer = new System.Timers.Timer(1000);
        timer.Elapsed += new System.Timers.ElapsedEventHandler(AddCount);
        timer.AutoReset = true;
        Application.Lock();
        Application["timer"] = 1;
        Application.UnLock();
        timer.Enabled = true;
    }
private void AddCount(object sender, EventArgs e)
    {
        //BllTK<Model.BeanTK>
        //BllTK<Model.BeanTK> bllitem;
        BllTK<DataIDType> bllitem;
        bllitem = new BllTK<BeanTK>();
        Application.Lock();
        Application["timer"] = Convert.ToInt32(Application["timer"]) + 1;
        bllitem.Proportion(); //这里是我写的执行对数据库中题库中题目正确率的定时计算的sql语句
        Application.UnLock();
    }
也就是说我想设置的时间点怎么设置呢@feiyun_Web

#23


引用 21 楼 jjkk168 的回复:
Windows的计划任务+Console程序(Console程序没问题吧,计划任务去配置一下就行)

Windows Service(如果是定时任务,这个不推荐,Windows Service推荐应用于Socket Listen这种)

数据库的job(强烈推荐,省事一些)

哪一个都比Global.asax要方便

嗯,但是这几种都没接触过,想先在Global.asax里面试试,您知道要实现22楼的定时的功能的话要怎么实现吗

#24


window计划任务。
1.先建立一个控制台项目,你要处理的事情都在这里面实现。
2.window计划任务,设置好什么时间去执行那个控制台项目。

就OK了。

#26


windows计划就是你写个控制台,然后在  控制面板 --  管理工具 -- 计划任务  里面配置定时执行你的控制台程序就行了

#27


嗯,实际上你可以使用windows计划任务的“命令行”指令来查询、设置计划任务。这样你完全可以用你自己的 c# 程序来动态地创建、撤销你要的任务。

#1


SQLSERVER中使用作业
windows services定时
windows计划任务

#2


asp.net 里开线程

#3


asp.net 不是干这个的。asp.net 不能保证应用不被回收。

使用windows“计划任务”去执行一个后台控制台小程序是可以的。或者安装你的windows service应用。

#4


windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

#5


引用 4 楼 sp1234 的回复:
windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

我要实现一个网站系统后台自己在特定的时刻计算数据库中的数据,可以用windows计划?那我要写在哪个文件里

#6


引用 1 楼 xiaojie_cp 的回复:
SQLSERVER中使用作业
windows services定时
windows计划任务

请说的详细些

#7


引用 2 楼 yahle 的回复:
asp.net 里开线程

要如何实现

#8


网上找 window service  

#9


引用 8 楼 hanjun0612 的回复:
网上找 window service  

我是要在asp中写

#10


你能确定,你的网页永远开着?
如果不能确定,那你做不到

#11


计划任务,或windows service

#12


引用 6 楼 hyx_93 的回复:
Quote: 引用 1 楼 xiaojie_cp 的回复:

SQLSERVER中使用作业
windows services定时
windows计划任务

请说的详细些

三种实现方式,每一个都有相关的知识点,不是一两句能概括的。

#13


引用 4 楼 sp1234 的回复:
windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

如下代码写在Application_start事件中

            System.Timers.Timer timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(AddCount);

            //AddCount是一个方法,此方法就是每个1秒而做的事情
            timer.AutoReset = true;
            //给Application["timer"]一个初始值
            Application.Lock();
            Application["timer"] = 1;
             Application.UnLock();
            timer.Enabled = true;

然后自定义AddCount方法 格式如下:

      private void AddCount(object sender, ElapsedEventArgs e)
        {     

             Application.Lock();
             Application["timer"] = Convert.ToInt32(Application["timer"])+1;

           //这里写要执行的数据库操作
            Application.UnLock();
}
上面是写在Global.asax中的,你们觉得怎么样,不是我写的,是我借鉴别人的

#14


引用 13 楼 hyx_93 的回复:
Quote: 引用 4 楼 sp1234 的回复:

windows下创建一个计划很简单,可以看 msdn: https://msdn.microsoft.com/zh-cn/library/cc772785(v=ws.10).aspx#BKMK_days

在你的电脑上按  Win+R 键打开命令行窗口,然后输入一行指令就行了。

如下代码写在Application_start事件中

            System.Timers.Timer timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(AddCount);

            //AddCount是一个方法,此方法就是每个1秒而做的事情
            timer.AutoReset = true;
            //给Application["timer"]一个初始值
            Application.Lock();
            Application["timer"] = 1;
             Application.UnLock();
            timer.Enabled = true;

然后自定义AddCount方法 格式如下:

      private void AddCount(object sender, ElapsedEventArgs e)
        {     

             Application.Lock();
             Application["timer"] = Convert.ToInt32(Application["timer"])+1;

           //这里写要执行的数据库操作
            Application.UnLock();
}

上面是写在Global.asax中的,你们觉得怎么样,不是我写的,是我借鉴别人的

嗯,这也是一种方法~~

#15


在 asp.net 中,根本不用访问从为了兼容 asp 而保留的 Application 集合。你直接声明一个
System.Timers.Timer timer 
就可以了。

不过不能保证 asp.net 进程不被回收。只是在你自己的电脑上玩玩儿而已。

#16


你直接声明一个
static System.Timers.Timer timer 
 就可以了,根本不用什么 Application 集合。

但是这不是重点。

#17


引用 16 楼 sp1234 的回复:
你直接声明一个
static System.Timers.Timer timer 
 就可以了,根本不用什么 Application 集合。

但是这不是重点。


引用 15 楼 sp1234 的回复:
在 asp.net 中,根本不用访问从为了兼容 asp 而保留的 Application 集合。你直接声明一个
System.Timers.Timer timer 
就可以了。

不过不能保证 asp.net 进程不被回收。只是在你自己的电脑上玩玩儿而已。

您的意思是什么?可以再详细点说一下吗

#18


关注。
楼主百度一下以下关键字组:有很多文章
asp.net static变量 回收

然后可以看一下这个链接
http://blog.csdn.net/cwj649956781/article/details/24666551

#19


quartz和hangfire,记得千万别host在iis上

#20


13楼方法可行。难道都忘记GC.KeepAlive了么

Global.asax
    void Application_Start(object sender, EventArgs e)
    {
            System.Timers.Timer aTimer = new System.Timers.Timer(120000);
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
            aTimer.AutoReset = true;
            GC.KeepAlive(aTimer);//关键点
    }

    void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {

    }


#21


Windows的计划任务+Console程序(Console程序没问题吧,计划任务去配置一下就行)

Windows Service(如果是定时任务,这个不推荐,Windows Service推荐应用于Socket Listen这种)

数据库的job(强烈推荐,省事一些)

哪一个都比Global.asax要方便

#22


引用 20 楼 feiyun_Web 的回复:
13楼方法可行。难道都忘记GC.KeepAlive了么

Global.asax
    void Application_Start(object sender, EventArgs e)
    {
            System.Timers.Timer aTimer = new System.Timers.Timer(120000);
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
            aTimer.AutoReset = true;
            GC.KeepAlive(aTimer);//关键点
    }

    void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {

    }

请问这里定时执行任务是怎么设置呢,比如我想每天凌晨2点执行数据库的操作,语句已经写好,

void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        System.Timers.Timer timer = new System.Timers.Timer(1000);
        timer.Elapsed += new System.Timers.ElapsedEventHandler(AddCount);
        timer.AutoReset = true;
        Application.Lock();
        Application["timer"] = 1;
        Application.UnLock();
        timer.Enabled = true;
    }
private void AddCount(object sender, EventArgs e)
    {
        //BllTK<Model.BeanTK>
        //BllTK<Model.BeanTK> bllitem;
        BllTK<DataIDType> bllitem;
        bllitem = new BllTK<BeanTK>();
        Application.Lock();
        Application["timer"] = Convert.ToInt32(Application["timer"]) + 1;
        bllitem.Proportion(); //这里是我写的执行对数据库中题库中题目正确率的定时计算的sql语句
        Application.UnLock();
    }
也就是说我想设置的时间点怎么设置呢@feiyun_Web

#23


引用 21 楼 jjkk168 的回复:
Windows的计划任务+Console程序(Console程序没问题吧,计划任务去配置一下就行)

Windows Service(如果是定时任务,这个不推荐,Windows Service推荐应用于Socket Listen这种)

数据库的job(强烈推荐,省事一些)

哪一个都比Global.asax要方便

嗯,但是这几种都没接触过,想先在Global.asax里面试试,您知道要实现22楼的定时的功能的话要怎么实现吗

#24


window计划任务。
1.先建立一个控制台项目,你要处理的事情都在这里面实现。
2.window计划任务,设置好什么时间去执行那个控制台项目。

就OK了。

#25


#26


windows计划就是你写个控制台,然后在  控制面板 --  管理工具 -- 计划任务  里面配置定时执行你的控制台程序就行了

#27


嗯,实际上你可以使用windows计划任务的“命令行”指令来查询、设置计划任务。这样你完全可以用你自己的 c# 程序来动态地创建、撤销你要的任务。