網上搜到的方法是寫在Global.asax的Application_Start里面,說是iis啟動后,有第一個人訪問網站了,就會執行。目前有幾點小疑惑:1、有人訪問了,就會執行,然后用戶關閉了網頁,會有影響嗎?2、多個人訪問,會執行多次嗎?3、是否是開始執行后,只要不關閉iis,定時任務就不會終止?
uj5u.com熱心網友回復:
Application_Start這個東西,可能會因為IIS的應用程式池更改或者其他什么原因意外的重新啟動。你要執行定時任務,還是需要把執行的記錄日志保存下來,避免重復執行或漏掉。
uj5u.com熱心網友回復:
是想執行msmq訊息佇列的,但是不想用windows service,想寫在專案里。那按照你的意思,就是如果能記錄好操作記錄,是可以使用這個的是嗎?uj5u.com熱心網友回復:
還是用windows service吧,Application_Start這種東西實際應用幾乎不再用,你無法控制它什么時候會重啟。uj5u.com熱心網友回復:
唉,難受uj5u.com熱心網友回復:
其實無所謂.. 我們就用最簡單的方式來辯論..你appstart的時候 去實體化一個定時器 假設1小時執行一次. 你一天一次 那么隨便寫一個H=數字(0-23) 都可以.
好 現在有人說 會有重啟 或者意外重啟 或者自動回收 . 但是 他們都不是停止...
也就是 只要執行了上述動作 依然會執行appstart.. 又會有一個新的定時器
uj5u.com熱心網友回復:
不必強迫癥,不必糾結啥一天,iis你的系統不會因為這個掛掉,你保證2,3天能夠被執行n次的能力就好(1<N<20).
如果說你的系統會因為你延遲了1分鐘清理就掛掉,就資料不準。那只能說你的系統需要重新設計了
比如財務夜核,這種業務需要每天執行1次。那么當是這種要求的時候,你還糾結啥iis Application_Start么?很明顯他需要重新設計了
uj5u.com熱心網友回復:
潔癖和強迫癥并不能幫助你解決問題。我只說,如果他不會產生啥影響,那么我可以保證他會執行,而不保證他一啥時候執行。
3天沒訪問iis,應用程式池不啟動,影響業務么?
不影響業務那么就3天后那個人訪問的時候做有問題么?
訪問的時候同時做影響業務么?無影響或者可以忽略不計,你擔心啥
如果有影響而且必須做。才會涉及到重新設計方案。也就是上面說的“業務需要重構,而不是潔癖和強迫癥讓你無端操心”
uj5u.com熱心網友回復:
Global.asax的Application_Start會在iis啟動后,有第一個人訪問網站了,就會執行,可以在里面開個定時器System.Timers.Timer,不過在無人訪問網站后,會在默認20分鐘后程式關閉(要看web.config中設定的時間Timeout,<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>),程式關閉后定時器也就不運行了,之后再有人訪問網站,Application_Start方法還是會重新運行的uj5u.com熱心網友回復:
好的,說的很明白了,感謝uj5u.com熱心網友回復:
懂了,感謝uj5u.com熱心網友回復:
你在 Application_End 這里寫個 自己訪問自己 不就得了protected void Application_End(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
string url = "http://localhost:XXXX//XXXXX";
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
System.Net.HttpWebResponse rsp = (System.Net.HttpWebResponse)req.GetResponse();
string tmp = rsp.StatusDescription;
string errorlogtime = DateTime.Now.ToString("yyyyMMddhhmmssfff").ToString();
if (sched != null)
{
sched.Shutdown(true);
}
}
uj5u.com熱心網友回復:
或者 你百度一下 Quartz.net 用這個框架寫 任務uj5u.com熱心網友回復:
不錯
uj5u.com熱心網友回復:
其實真不必糾結。我們來看一下一些,知名設計
redis: redis說,過期不過期有那么重要么,有人訪問我就執行一下過期檢查,沒人訪問我過期不過期不重要。 好吧,你說你不想檢查,OK,修改配置,變成過期推送通知,我在說搞個定時器去玩(當然redis一樣說的是,這個定時器不會很精準,我不保證精準,單保證他侄訓被移除)
這個風格也弄到了netcore里,famerwork里runtimecache是提供實時移除通知的,但到了netcore里的cache,可是不會給你實時移除的,他跟redis一樣,說的是“反正他總會移除,你訪問我才去檢查,不訪問我沒必要無端弄個檢查,浪費性能”
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/8442.html
標籤:C#
