2012-02-12 25 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 /內存閾值,......當然,當您的應用程序是從內存中卸載您可能產生的所有線程來執行此後臺任務將停止。

或者,有什麼我應該做的?

是的,根據你想要達到的目標(你爲什麼需要這個變量以及它應該如何使用......),可能還有其他方法。

相關問題