天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

利用Timer在ASP.NET中實現計劃任務的方法

.NET Framework中為我們提供了3種類型的Timer,分別是:
Server Timer(System.Timers.Timer),Thread Timer(System.Threading.Timer )和Windows Timer(System.Windows.Forms.Timer)。
其中Windows Timer和WinAPI中的Timer一樣,是基于消息的,而且是單線程的。另外兩個Timer則不同于Windows Timer,它們是基于ThreadPool的,這樣最大的好處就是,產生的時間間隔準確均勻。Server Timer和Thread Timer的區別在于,Server Timer是基于事件的,而Thread Timer是基于Callback的。
相比之下Thread Timer更輕量級一些,所以下文主要以Thread Timer為例,講解如何利用Thread Timer在ASP.NET中實現計劃任務。
下面給出一個用Timer實現計劃任務的類:
public class ScheduledTask
{
private static readonly ScheduledTask _ScheduledTask = null;
private Timer UpdateTimer = null;
//間隔時間,這里設置為15分鐘
private int Interval = 15 * 60000;
private int _IsRunning;
static ScheduledTask()
{
_ScheduledTask = new ScheduledTask();
}
public static ScheduledTask Instance()
{
return _ScheduledTask;
}
public void Start()
{
if(UpdateTimer == null)
{
UpdateTimer = new Timer(new TimerCallback(UpdateTimerCallback), null, Interval, Interval);
}
}
private void UpdateTimerCallback(object sender)
{
if(Interlocked.Exchange(ref _IsRunning, 1) == 0)
{
try
{
//此處寫你自己想執行的任務
}
catch(Exception ex)

}
finally
{
Interlocked.Exchange(ref _IsRunning, 0);
}
}
}
public void Stop()
{
if(UpdateTimer != null)
{
UpdateTimer.Dispose();
UpdateTimer = null;
}
}
}
首先,注意一下這段:private int _IsRunning;
_IsRunning是一個標志,它代表上一個時間間隔觸發的任務是否運行完成。
為什么我們需要這個_IsRunning標志呢?
因為,如果我們執行的任務時間很長,就可能造成上一個時間段觸發的任務還沒有執行完成,下一個任務又開始了,這樣就會造成重入的問題。為了解決這個問題,我們用_IsRunning作為一個標志,表示上次的任務是否完成了,如果完成了,我們就執行新的任務,如果沒完成就跳過這次的任務繼續執行上次的任務。
具體的邏輯在下面這段代碼中實現:
 程序代碼
private void UpdateTimerCallback(object sender)
{
if(Interlocked.Exchange(ref _IsRunning, 1) == 0)
{
try
{
//此處寫你自己想執行的任務
}
catch(Exception ex)

}
finally
{
Interlocked.Exchange(ref _IsRunning, 0);
}
}
}
大家看到,上面代碼中用到了Interlocked.Exchange這個方法。該方法的作用是保證多線程下給對象賦值的安全性。因為在多線程下,我們直接給_IsRunning賦值是不安全的,所以在這種情況下Interlocked.Exchange就派上了用場。
說完了ScheduledTask類的實現,下面我們看看如何在ASP.NET中調用這個類。
建議在Application_Start中調用這個類,代碼如下:
 程序代碼
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
ScheduledTask.Instance().Start();
}
protected void Application_End(object sender, EventArgs e)
{
ScheduledTask.Instance().Stop();
}
}
OK,以上就是Timer在ASP.NET中的簡單應用,如果有什么說的不對的地方,還請多多指教。

AspNet技術利用Timer在ASP.NET中實現計劃任務的方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产在线观看网址你懂得 | 国产精品毛片在线视频 | 女性性纵欲派对 | 内地同志男16china16 | 神马老子影院午夜伦 | 久久热在线视频精品1 | 草莓国产视频免费观看 | 国产精品AV色欲蜜臀在线 | 漂亮的保姆3中文版完整版 漂亮的保姆3集电影免费观看中文 | 二色AV天堂在线 | 久久久精品久久久久三级 | 在线AV国产传媒18精品免费 | 8050午夜二级一片 | 259luxu高跟黑色丝袜系列 | 国产专区亚洲欧美另类在线 | 亚洲乱码在线卡一卡二卡新区 | 伦理片秋霞免费影院 | 国产亚洲精品久久久闺蜜 | 丰满人妻无码AV系列 | 国产人妻777人伦精品HD | 色戒在线完整观看在线播放版 | 国产传媒在线播放 | 怡春院院日本一区二区久久 | 97国产视频 | 日本高清不卡码无码v亚洲 日本福利片午夜免费观着 日本粉嫩学生毛绒绒 | 高清国产在线播放成人 | 久久精品嫩草影院免费看 | 黄色三级三级三级免费看 | 国产欧美精品一区二区三区-老狼 | 2020精品极品国产色在线 | 激情欧美日韩一区二区 | 国产亚洲精品品视频在线 | 亚洲国产AV精品一区二区蜜芽 | 亚洲精品www久久久久久 | 在线观看国产人视频免费中国 | 给我免费播放片bd国语 | 狼群影院视频在线观看WWW | 久久麻豆亚洲AV成人无码国产 | 办公室里做好紧好爽H | 一道精品视频一区二区 | 亚洲精品6久久久久中文字幕 |