2014-11-21 56 views
-3

我試圖讓託管我的Web應用程序的服務器每分鐘運行一次。在Global.asax.csApplication_Start(),我有以下代碼:線程在計時器上運行僅在啓動應用程序時觸發

var timer = new System.Threading.Timer(
    e => DatMethod(), 
    null, 
    TimeSpan.Zero, 
    TimeSpan.FromMinutes(1) 
); 

目前我只是DatMethod寫有時間戳的文本文件。當我點擊F5並開始調試時,我可以看到它寫入一次,但它再也不會運行。

這是放置代碼的正確位置嗎?如果是這樣,我做錯了什麼?如果不是,我該如何正確設置它?

+1

我認爲這可以解決你的問題,你是正確的。 http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/ – 2014-11-21 18:53:08

+1

@NikolaMitev感謝您的參考,我現在會嘗試。 – tnw 2014-11-21 18:59:39

+0

@NikolaMitev這非常出色。謝了哥們。如果您想將該代碼作爲答案發布並提及作爲參考,我很樂意接受它作爲答案。 – tnw 2014-11-21 19:19:11

回答

2

如果您使用10秒的時間間隔而不是一分鐘,那麼您可以看到您的代碼將被執行多次,但您的代碼不會永久繼續執行,因爲垃圾收集器將在一段時間後收集您的計時器實例,並在Timer類的終結器方法中停止其所有活動。 如果你爲你的timer類使用靜態變量,那麼就不會有任何問題 但是等等,這種方法在ASP.NET線程機制中有幾個問題。 相反,您必須使用類似http://www.quartz-scheduler.net/ 您可能也有興趣http://msdn.microsoft.com/en-us/library/dn636893(v=vs.110).aspx 讓我知道是否需要任何其他信息。

相關問題