我想知道是否有可能创建后台任务,我的意思是,在asp.net中,每个用户都有自己的实例,所以如果我要创建一个计时器,当2个用户在它上面时创建我不想要的2个计时器实例。
我基本上想要一个作为一个实例并且是独立的计时器。我想这样做的原因是因为我想每5分钟左右进行一次SQL查询,而且我不希望2个用户同时运行它,因为它不会相隔5分钟它可能是2分钟和30秒相隔。
USER1 --- ASP.NET INSTANCE USER2 --- ASP.NET INSTANCE
定时器---与用户无关
我听说过网络服务和Quartz.net之类的东西,但我不确定这是我想要的。
希望有道理:)
答案 0 :(得分:2)
实际上,Quartz.NET是最好的解决方案,因为它是为它做的:按计划运行任务。 如果由于某些原因,您不想使用它,最简单的方法是在单例类中使用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将终止您的池并且计时器将停止运行;最好的办法是在不同的进程中托管Quart.NET调度程序,比如Windows服务。