2015-06-24 66 views
0

我一直在尋找關於如何正確使用C#中的計時器功能來觸發函數的示例。此處稱爲GetIntStatus()的功能基本上彙總了來自多個數據庫的數據並存儲在單獨的數據庫中。我需要在每隔2小時的時間間隔內運行此函數來刷新數據,然後將數據拉入網格中(這一部分我已經介紹了它)。有人能告訴我如何最好地處理這種情況?C#web應用程序中Timer的正確用法

+0

非平凡任務,因爲你說它需要在Web應用程序的上下文中運行。這是一個解決方案:http://hangfire.io/ – MatthewMartin

+0

爲什麼這是在一個web應用程序?如果數據全是服務器端,那麼爲什麼不在服務器上運行一個控制檯應用程序? – PaulBinder

+0

這不應該在Web應用程序中。這應該在Windows服務或計劃的控制檯應用程序中。 – David

回答

3

在WebAplication中使用Timer的正確方法是根本不使用定時器。

替代長期運行/重複任務的方法:

  • 在服務器端的計劃任務(外部進程與Windows或任何其他調度工具)。計劃重複運行的客戶端瀏覽器
  • 重新請求的數據與腳本
  • 平數據(假設它是打開所有的時間)
  • 使用緩存和配置項目重新請求的期限。

有時在請求期間使用短暫的定時器來處理超時是沒問題的。即Task.Delay可能會用於強制超時與其他可能長時間的任務並行運行。

0

不完全確定GetIntStatus()是如何實現的,但我必須做類似的事情。基本上,你只需啓動一個計時器,設置一個時間間隔,並設置一些方法,以便在間隔結束後進行調用。

這裏的語法:

System.Timers.Timer timer = new System.Timers.Timer(); 
timer.Start(); 
timer.Interval = 5 * 60 * 1000; // 5 minute updates 
timer.Elapsed += (sender, args) => PerformUpdates(); 

在我的情況下,PefromUpdates()是返回的任務異步方法。

+0

這不適用於Web應用程序,應用程序將被回收,並且只有當您獲得您的下一位訪問者訪問該網站時,您的計時器纔會啓動。 –

+0

你能給我一個完整的語法嗎? –

+0

忘記提及了,這是在自行託管的WCF服務中執行的。無可否認,這隻適用於斯科特·張伯倫提到的特定情況。 – cheft

相關問題