2016-03-09 90 views
3

如何創建一個thread或每一小時運行一次的任務?例如,要根據時間更新數據庫中的數據。我可以在Global.asax文件中創建Application_Start()方法中的線程,是嗎?如何創建每小時運行一次函數的線程? APS.NET WebApi

+0

它可以使用單獨的控制檯應用程序完成。創建控制檯應用程序並安排它每小時運行一次。 –

+0

我的網站託管在'somee.com' asp.net服務器上,我認爲它無法運行控制檯應用程序。這可以通過'虛擬專用服務器'完成 –

回答

3

一般:你沒有。

您提供一個觸發操作的終點(URL)並每小時調用一次。這顯然可以自動發生。

例如http://www.mywebcron.com/可以每小時打一次電話給您,沒有任何問題。

這樣可以避免一旦成長(多個Web服務器)或重新啓動應用程序時遇到的所有問題。

ASP.NET很多 - 它不是一個調度器。

2

我不是一個從asp.net運行計劃任務的忠實粉絲,但是如果你需要,你可以使用同樣的方法來使用和觸發CacheItemRemoved上的事件。 你可以看到Jeff Attwood的博客文章here。但基本上只需訂閱CacheItemRemoved事件並從那裏啓動您的任務。

private static CacheItemRemovedCallback OnCacheRemove = null; 

protected void Application_Start(object sender, EventArgs e) 
{ 
    AddTask("DoStuff", 60); 
} 

private void AddTask(string name, int seconds) 
{ 
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); 
    HttpRuntime.Cache.Insert(name, seconds, null, 
     DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, 
     CacheItemPriority.NotRemovable, OnCacheRemove); 
} 

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r) 
{ 
    // do stuff here if it matches our taskname, like WebRequest 
    // re-add our task so it recurs 
    AddTask(k, Convert.ToInt32(v)); 
} 
相關問題