需要在asp.net mvc应用程序中基于计时器更新singleton变量
本文关键字:计时器 更新 变量 singleton 应用程序 asp net mvc | 更新日期: 2023-09-27 18:24:15
我在一个单例中有一个变量(自定义对象),我想根据计时器更新它。
因此,每隔30分钟,我就会从数据库中获取新的值,并更新这个变量。不同服务器之间的最终一致性是唯一重要的——因此,如果一台服务器的值稍旧,因为单例计时器没有同步,那就不是问题。
我想在带有计时器的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;
}
}
}