ASP.Net定時任務執行


原料:

System.Timers.Timer():通過.NET  Thread  Pool實現的,輕量,計時精確,對應用程序、消息沒有特別的要求;缺點是不支持直接的拖放,需要手工編碼。

Timer的主要屬性:

1、Interval:引發Elapsed事件的間隔;

2、Elapsed:達到間隔發生的事件;

3、Enabled:指示Timer是否應引發Elapsed事件;

設計:

一、TaskBase,任務基類

1、字段:

a、TimeMode,任務類型分為周期型和時刻型;

b、LastStartTime

2、屬性:

a、NextStartTime,只讀屬性

if (this.TimeMode == 0)
{
  if (this.LastStartTime == DateTime.MinValue)
  {
    return DateTime.MinValue;
  }
  return this.LastStartTime.AddSeconds((double)this.MinPeriod);
}
if (this.LastStartTime == DateTime.MinValue)
{
  return this.TheFixedNextStartTime;
}
return this.LastStartTime.AddDays(1.0).Date.AddHours((double)this.Hour).AddMinutes((double)this.Minute);

b、TheFixedNextStartTime,只讀屬性

if (this._theFixedNextStartTime == DateTime.MinValue)
{
  this._theFixedNextStartTime = DateTime.Today.AddHours((double)this.Hour).AddMinutes((double)this.Minute);
  if (((SystemStartTime.Hour * 100) + SystemStartTime.Minute) > ((this.Hour * 100) + this.Minute))
  {
    this._theFixedNextStartTime = this._theFixedNextStartTime.AddDays(1.0);
  }
}
return this._theFixedNextStartTime;

3、方法:

1、Execute:任務的具體執行

2、Run:任務運行

this.LastStartTime = DateTime.Now;

this.Execute();

二、TaskMonitor:任務監控

1、方法

a、Execute:Timer.Elapsed事件  

if (TimeMode == 1)
{
  flag = DateTime.Now >= base2.NextStartTime;
}
else
{
  flag = ((base2.TickCount == 0) && (base2.LastStartTime == DateTime.MinValue));
  if (!flag)
  {//定時器的運行間隔和任務運行間隔的比較
    base2.TickCount += CheckPeriod;
    flag = base2.TickCount >= base2.MinPeriod;
  }
  if (flag)
  {
    base2.TickCount = 0;
  }
}
if (flag)
  Thread.RunMethod(new ThreadStart(base2.Run));

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM