Asp.net 如何在后台创建任务
我想知道是否有可能创建后台任务,我的意思是,在asp.net中,每个用户都有自己的实例,所以如果我要创建一个计时器,当2个用户在上面时,它将创建2个我不想要的计时器实例 我基本上想要一个计时器,它是一个独立的实例。我之所以要这样做,是因为我想每隔5分钟左右进行一次SQL查询,我不希望两个用户同时运行它,因为这样就不会相隔5分钟,可能相隔2分30秒 USER1---ASP.NET实例 USER2---ASP.NET实例 定时器---与用户无关 我听说过web服务和Quartz.net之类的东西,但我不确定这是否是我想要的Asp.net 如何在后台创建任务,asp.net,timer,background,Asp.net,Timer,Background,我想知道是否有可能创建后台任务,我的意思是,在asp.net中,每个用户都有自己的实例,所以如果我要创建一个计时器,当2个用户在上面时,它将创建2个我不想要的计时器实例 我基本上想要一个计时器,它是一个独立的实例。我之所以要这样做,是因为我想每隔5分钟左右进行一次SQL查询,我不希望两个用户同时运行它,因为这样就不会相隔5分钟,可能相隔2分30秒 USER1---ASP.NET实例 USER2---ASP.NET实例 定时器---与用户无关 我听说过web服务和Quartz.net之类的东西,但
希望它有意义:)实际上,Quartz.NET是最好的解决方案,因为它是为它量身定做的:按计划运行任务。 如果出于某些原因,您不想使用它,最简单的方法是在singleton类中使用Timer对象;您可以在global.asax中启动计时器,这将为您提供一个在所有用户之间共享的计时器。 比如:
public class SingletonTimer
{
private static SingletonTimer _instance = null;
private Timer _myTimer;
protected SingletonTimer()
{
_myTimer = new Timer(Callback, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
}
private void Callback(object state)
{
// SQL QUERY
}
public static SingletonTimer GetInstance()
{
return _instance ?? (_instance = new SingletonTimer());
}
}
但是,这不是一个稳定的解决方案,因为在20分钟不活动后,IIS将杀死您的池,并且计时器将停止运行;最好的做法是在不同的进程(如windows服务)中托管Quart.NET调度程序。好的,我看看它是否有效,然后将其标记为正确。:)你说在20分钟不活动后,IIS会杀死你的池,如果用户重新打开,它会再次启动吗?是的,会。池将像第一次连接一样启动,global.asax将再次运行,等等。