需要在asp.net mvc应用程序中基于计时器更新singleton变量

本文关键字:计时器 更新 变量 singleton 应用程序 asp net mvc | 更新日期: 2023-09-27 18:24:15

我在一个单例中有一个变量(自定义对象),我想根据计时器更新它。

因此,每隔30分钟,我就会从数据库中获取新的值,并更新这个变量。不同服务器之间的最终一致性是唯一重要的——因此,如果一台服务器的值稍旧,因为单例计时器没有同步,那就不是问题。

我想在带有计时器的singleton构造函数中生成一个线程,并根据该计时器更新变量。

我不确定在应用程序生命周期中,从单例启动的线程可以在哪里终止。这是正确的体系结构方法吗?或者,还有什么我应该做的吗?

需要在asp.net mvc应用程序中基于计时器更新singleton变量

这项工作一开始看起来很简单,但可能会变得非常复杂,因为不建议在ASP.NET中处理重复的后台任务。原因是在某些情况下,web服务器可能会卸载应用程序域,这些情况超出了您的控制范围,例如网站上有一段时间处于非活动状态,达到了一些CPU/内存阈值。。。当然,当您的应用程序从内存中卸载时,您可能生成的执行此后台任务的所有线程都将停止。

或者,还有什么我应该做的吗?

是的,可能还有其他方法,这取决于你试图实现的目标(你在哪里、为什么需要这个变量以及应该如何使用它,…)。

为什么不在请求时更新它呢?这样,如果它没有被使用,你就不会浪费时间更新它。像这样。。。

public class MyClass
{
    private static MyClass sInstance
    private static DateTime sInstanceLastUpdated = DateTime.MinValue;
    public static MyClass Instance
    {
        get
        {
            if(sInstance == null || DateTime.Now.Subtract(sInstanceLastUpdated).TotalMinutes > 30)
            {
                sInstance = new MyClass();
                // initialize.
            }
            return sInstance;
        }
    }
}