程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Asp.Net(C#)自動執行計劃任務的程序實例分析

Asp.Net(C#)自動執行計劃任務的程序實例分析

編輯:關於ASP.NET

在業務復雜的應用程序中,有時候會要求一個或者多個任務在一定的時間或者一定的時間間隔內計劃進行 ,比如定時備份或同步數據庫,定時發送電子郵件等,我們稱之為計劃任務。實現計劃任務的方法也有很多, 可以采用SQLAgent執行存儲過程來實現,也可以采用Windows任務調度程序來實現,也可以使用Windows服務來 完成我們的計劃任務,這些方法都是很好的解決方案。但是,對於Web應用程序來說,這些方法實現起來並不 是很簡單的,主機服務提供商或者不能直接提供這樣的服務,或者需要你支付許多額外的費用。 本文就介紹 一個直接在Web應用程序中使用的簡單的方法,這個方法不需要任何額外的配置即可輕松實現。

由於ASP.NET站點是作為Web應用程序運行的,它並不受線程的限制,因此我們可以非常方便地在 Application_Start和Application_End事件中建立和銷毀一個計劃任務。下面就簡單介紹一下在Web站點實現 計劃任務的方法。我們的例子是定時往文件裡添加信息,作為例子,這裡把當前的時間定時地寫入文件中。

一個計劃任務的工作單元稱之為一個任務(Job),下面的代碼描述了對所有任務都可以被調度引擎計劃 執行的一個通用的接口,這裡的每個任務實現了Execute方法,供調度引擎進行調用:

1 public interface ISchedulerJob

2     {

3         void Execute();

4     }

如前所述,我們的例子是實現往文件寫如字符日期,下面就是實現這一任務的方法:

1 public class SampleJob : ISchedulerJob
2 {
3 public void Execute()
4 {
5 //文件保存的物理路徑,CSTest為虛擬目錄名稱,F:\Inetpub\wwwroot\CSTest為物理路徑
6 string p = @"C:\Users\Jack\Desktop\AutoRun\AutoRun";
7 //我們在虛擬目錄的根目錄下建立SchedulerJob文件夾,並設置權限為匿名可修改,
8 //SchedulerJob.txt就是我們所寫的文件
9 string FILE_NAME = p+ "\\SchedulerJob\\SchedulerJob.txt";
10 //取得當前服務器時間,並轉換成字符串
11 string c = System.DateTime.Now.ToString("yyyy-mm-dd hh:MM:ss");
12 //標記是否是新建文件的標量
13 bool flag = false;
14 //如果文件不存在,就新建該文件
15 if (!File.Exists(FILE_NAME))
16 {
17 flag = true;
18 StreamWriter sr = File.CreateText(FILE_NAME);
19 sr.Close();
20 }
21 //向文件寫入內容
22 StreamWriter x = new StreamWriter(FILE_NAME,true,System.Text.Encoding.Default);
23 if(flag) x.Write("計劃任務測試開始:");
24 x.Write("\r\n"+c);
25 x.Close();
26 }
27 }

接下來,我們建立一個配置對象,告訴調度引擎執行什麼任務和執行的時間間隔。

public class SchedulerConfiguration    
{    
//時間間隔    
private int sleepInterval;    
//任務列表    
private ArrayList jobs = new ArrayList();    
       
public int SleepInterval { get { return sleepInterval; } }    
public ArrayList Jobs { get { return jobs; } }    
       
//調度配置類的構造函數    
public SchedulerConfiguration(int newSleepInterval)    
{    
sleepInterval = newSleepInterval;    
}    
}    
       
下面就是調度引擎,定時執行配置對象的任務    
       
public class Scheduler    
{    
private SchedulerConfiguration configuration = null;    
       
public Scheduler(SchedulerConfiguration config)    
{    
configuration = config;    
}    
       
public void Start()    
{    
while(true)    
{    
//執行每一個任務    
foreach(ISchedulerJob job in configuration.Jobs)    
{    
ThreadStart myThreadDelegate = new ThreadStart(job.Execute);    
Thread myThread = new Thread(myThreadDelegate);    
myThread.Start();    
Thread.Sleep(configuration.SleepInterval);    
}    
}    
}    
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved