如何在后台创建任务

时间:2016-03-16 08:41:49

标签: asp.net timer background

我想知道是否有可能创建后台任务,我的意思是,在asp.net中,每个用户都有自己的实例,所以如果我要创建一个计时器,当2个用户在它上面时创建我不想要的2个计时器实例。

我基本上想要一个作为一个实例并且是独立的计时器。我想这样做的原因是因为我想每5分钟左右进行一次SQL查询,而且我不希望2个用户同时运行它,因为它不会相隔5分钟它可能是2分钟和30秒相隔。

USER1 --- ASP.NET INSTANCE USER2 --- ASP.NET INSTANCE

定时器---与用户无关

我听说过网络服务和Quartz.net之类的东西,但我不确定这是我想要的。

希望有道理:)

1 个答案:

答案 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服务。