In business complex applications, sometimes one or more tasks can be planned within a certain amount of time or a certain time interval, such as timing backup or synchronous database, timing sends email, etc., we call it planned task. There are also many ways to implement planned tasks, and you can implement the SQLAgent to implement the stored procedure, or you can use the Windows task scheduler to implement, you can also use the Windows service to complete our planned task, which is a good solution. However, for web applications, these methods are not very simple, host service providers or unable to provide such services, or you need you to pay many additional fees. This article describes a simple way to use directly in a web application, which does not require any additional configurations.
Since the ASP.NET site is run as a web application, it is not limited by the thread, so we can easily create and destroy a planned task in Application_Start and Application_end events. Let's take a brief introduction to the method of implementing planning tasks in the Web site. Our example is to add information to the file timing, as an example, where the current time is written to the file.
The work unit of a planned task is called a task (JOB). The following code describes a universal interface that can be performed by the scheduled engine plan for all tasks. Each task here implements the Execute method for the transfer engine. transfer:
Public interface ischedulerJob {void execute ();
As mentioned earlier, our example is to implement the document, such as the character date, which is the method of implementing this task:
Public class sample, {// file saved physical path, cstest is a virtual directory name, f: / inetpub / wwwroot / cstest is a physical path string p = @ "f: / inetpub / wwwroot / cstest "; // We create the SchedulerJob folder in the root of the virtual directory, and set the permissions to modify, //schedulerJob.txt is the file we have written String file_name = p " //schedulerjob/schedulerjob.txt " ; // get the current server time, and convert to string string c = system.datetime.now.tostring ("YYYY-MM-DD HH: MM: SS"); / / Tag is the sputum of the new file BOOL FLAG = False; // If the file does not exist, create the file if (! file.exists (file_name)) {flag = true; streamwriter sr = file.createtext (file_name); sr.close ();} // Write files Intent StreamWriter X = New StreamWriter (file_name, true, system.text.encoding.default); if (flag) x.write ("Scheduled task test start:"); x.write ("/ r / n" C ); X.Close ();}}
Next, we build a configuration object, tell the scheduled engine to perform what tasks and time intervals are performed. Public class schedulerConfiguration {// Time Interval Private Int Sleepinterval; // Task List Private ArrayList Jobs = New ArrayList ();
Public Int Sleepinterval {Get {Return Sleepinterval;}} public arraylist jobs {get {return jobs;}}
// Scheduling Configuration Class Constructor PUBLIC SCHEDULERCONFIGURATION (INT Newsleepinterval) {Sleepinterval = Newsleepinterval;}}
Below is the schedule engine, and the task of the configuration object is performed.
Public class scheduler {private schedulerconfiguration control;
Public Scheduler (SchedulerConfiguration Config) {Configuration = Config;
public void Start () {while (true) {// perform each task foreach (ISchedulerJob job in configuration.Jobs) {ThreadStart myThreadDelegate = new ThreadStart (job.Execute); Thread myThread = new Thread (myThreadDelegate); myThread.Start (); Thread.sleep (configuration.sleepinterval);}}}}
All preparations have been completed, the following is the work of the activation engine. In order to make our task plan, we create and destroy jobs in Applicatio_Start and Application_end in the global.asax.cs file, first create a thread running running, we have a running interval here for 3 seconds.
public System.Threading.Thread schedulerThread = null; protected void Application_Start (Object sender, EventArgs e) {SchedulerConfiguration config = new SchedulerConfiguration (1000 * 3); config.Jobs.Add (new SampleJob ()); Scheduler scheduler = new Scheduler ( config); System.Threading.ThreadStart myThreadStart = new System.Threading.ThreadStart (scheduler.Start); System.Threading.Thread schedulerThread = new System.Threading.Thread (myThreadStart); schedulerThread.Start ();}
Finally, you need to destroy when you quit:
Protected Void Application_end (Object Sender, Eventargs E) {if (null! = schedulerthread) {schedulerthread.abort ();}} Well, build a C # web application engineering in vs.NET, establish taskscheduler.cs class, And modify the corresponding global.asax.cs file. In order to see the effect, we build a form Webform1.aspx, and the timing refreshes to check the data we recorded:
<% @ Page language = "c #" codebehind = "Webform1.aspx.cs" autoeventwireup = "false" inherits = "cstest.webform1"%>