2012-02-12 26 views
1

我有一个变量(自定义对象)在一个单例中,我想根据计时器进行更新。需要基于asp.net中的定时器更新单变量mvc应用程序

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

我想在派生单个构造函数中产生一个线程,并使用一个计时器并根据该计时器更新变量。

我不知道在应用程序生命周期中从单例开始的线程可以终止。这是正确的建筑方法吗?或者,还有什么我应该做的?

回答

0

为什么不立即更新它,当它被请求一旦过期?如果没有被使用,这样你就不会浪费时间更新它。像这样...

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; 
     } 
    } 
} 
3

这是一些可能看起来很容易在第一位置,但会变得非常复杂的任务,因为recurring background tasks in ASP.NET工作并不是建议要做什么。原因是应用程序域可能会在某些您无法控制的情况下由网络服务器卸载,例如网站上的一段时间不活动,达到一些CPU /内存阈值,......当然,当您的应用程序是从内存中卸载您可能产生的所有线程来执行此后台任务将停止。

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

是的,根据你想要达到的目标(你为什么需要这个变量以及它应该如何使用......),可能还有其他方法。

相关问题