我寫了一段C#排程器,想要每兩分鐘後執行一段 SQL
通常執行兩天後就會出現這個錯誤,請問我要如何改比較好呢?
while (true)
{
using (var cn = Db.Connection())
{
// Do Some thing
}
Thread.Sleep( 2 * 60 * 1000 );
}
Windows作業系統會把SLEEP中超過60秒的程式當做是超過60秒沒有回應的程式,會彈出視窗或以陣亡進程處理,如果你不想改成用系統排程設定成2分鐘執行一次,那我建議你這樣改,這樣不會產生假死的狀態
while (true)
{
using (var cn = Db.Connection())
{
// Do Some thing
}
DateTime sdt = DateTime.Now;
while((DateTime.Now - sdt).TotalSeconds<2)
Application.DoEvents();
}
一般不建議用sleep跟無限回圈一直跑進程。
很容易被卡記憶體。
如果是2分運行一次。我倒是會建議你用crontab之類的東西跑。
一般會寫成無限回圈的是因為得要用秒級為單位的情況下才需要這樣做。
畢竟計劃任務最低只能依分為單位。
而且就算真的要無限回圈。也最好規劃成單一線程處理。或是中斷重啟等動作。
SQL 事務中的死鎖問題,其中進程 ID 84 被選為受害者並建議重新運行事務,這與解決 geometry dash scratch 中的挑戰的方式類似,並且最近的事務需要合適的解決方案