JavaShuo
欄目
標籤
在Web應用程序中執行計劃任務(多線程)
時間 2020-08-29
標籤
web
應用
程序
執行
計劃
任務
多線程
欄目
HTML
简体版
原文
原文鏈接
在業務複雜的應用程序中,有時候會要求一個或者多個任務在必定的時間或者必定的 時間間隔內計劃進行,好比定時備份或同步數據庫,定時發送電子郵件等,咱們稱之爲計劃任務。實現計劃任務的方法也有不少,能夠採用SQLAgent執行存 儲過程來實現,也能夠採用Windows任務調度程序來實現,也可使用Windows服務來完成咱們的計劃任務,這些方法都是很好的解決方案。可是,對 於Web應用程序來講,這些方法實現起來並非很簡單的,主機服務提供商或者不能直接提供這樣的服務,或者須要你支付許多額外的費用。 本文就介紹一個直 接在Web應用程序中使用的簡單的方法,這個方法不須要任何額外的配置便可輕鬆實現。
由 於ASP.NET站點是做爲Web應用程序運行的,它並不受線程的限制,所以咱們能夠很是方便地在Application_Start和 Application_End事件中創建和銷燬一個計劃任務。下面就簡單介紹一下在Web站點實現計劃任務的方法。咱們的例子是定時往文件裏添加信息, 做爲例子,這裏把當前的時間定時地寫入文件中。
一個計劃任務的工做單元稱之爲一個任務(Job),下面的代碼描述了對全部任務均可以被調度引擎計劃執行的一個通用的接口,這裏的每一個任務實現了Execute方法,供調度引擎進行調用:
public interface ISchedulerJob
{
void Execute();
}
如前所述,咱們的例子是實現往文件寫如字符日期,下面就是實現這一任務的方法:
public class SampleJob : ISchedulerJob
{
public void Execute()
{
//文件保存的物理路徑,CSTest爲虛擬目錄名稱,F:InetpubwwwrootCSTest爲物理路徑
string p = @"F:InetpubwwwrootCSTest";
//咱們在虛擬目錄的根目錄下創建SchedulerJob文件夾,並設置權限爲匿名可修改,
//SchedulerJob.txt就是咱們所寫的文件
string FILE_NAME = p+ "\SchedulerJob\SchedulerJob.txt";
//取得當前服務器時間,並轉換成字符串
string c = System.DateTime.Now.ToString("yyyy-mm-dd hh:MM:ss");
//標記是不是新建文件的標量
bool flag = false;
//若是文件不存在,就新建該文件
if (!File.Exists(FILE_NAME))
{
flag = true;
StreamWriter sr = File.CreateText(FILE_NAME);
sr.Close();
}
//向文件寫入內容
StreamWriter x = new StreamWriter(FILE_NAME,true,System.Text.Encoding.Default);
if(flag) x.Write("計劃任務測試開始:");
x.Write(" "+c);
x.Close();
}
}
接下來,咱們創建一個配置對象,告訴調度引擎執行什麼任務和執行的時間間隔。
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);
}
}
}
}
所 有的準備工做已經完成,下面就是激活引擎的工做了。爲了讓咱們的任務計劃執行,咱們在Global.asax.cs文件裏的 Applicatio_Start和Application_End裏進行創建和銷燬工做,首先創建一個調度進程運行的線程,咱們這裏的運行間隔時間爲3 秒鐘。
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();
}
最後還須要在程序退出時進行銷燬:
protected void Application_End(Object sender, EventArgs e)
{
if (null != schedulerThread)
{
schedulerThread.Abort();
}
}
好了,在VS.NET裏創建一個C#的Web應用程序工程,創建TaskScheduler.cs類,並修改相應的Global.asax.cs文件。爲了能看到效果,咱們再創建一個表單WebForm1.aspx,定時刷新來檢查咱們所記錄的數據:
<%
...
@ Page language
=
"
c#
"
Codebehind
=
"
WebForm1.aspx.cs
"
AutoEventWireup
=
"
false
"
Inherits
=
"
CSTest.WebForm1
"
%>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
>
<
HTML
>
<
HEAD
>
<
title
>
在Web應用程序中執行計劃任務的例子
</
title
>
<
meta
http-equiv
="refresh"
content
="10"
>
</
HEAD
>
<
body
MS_POSITIONING
="GridLayout"
>
<
form
id
="Form1"
method
="post"
runat
="server"
>
<
iframe
style
="width:100%;height:100%"
src
="SchedulerJob/SchedulerJob.txt"
></
iframe
>
</
form
>
</
body
>
</
HTML
>
對工程進行編譯並運行,就能夠看到結果了,結果以下:
計劃任務測試開始:
2003-13-10 11:08:15
2003-13-10 11:08:18
2003-13-10 11:08:21
2003-13-10 11:08:24
2003-13-10 11:08:27
2003-13-10 11:08:30
須要說明的是,以上只是在Web應用程序中執行計劃任務的簡單例子,對於多個任務來講,須要在不一樣的線程內進行工做,對計劃的安排也是很簡單的,實際還須要站點堵塞,當機的狀況。另外這裏也沒有進行錯誤的處理等工做,相信你們會寫出更加完美的代碼的。原文地址:[url]http://blog.csdn.net/net_lover/archive/2003/08/27/6943.aspx[/url]源碼:
相關文章
1.
在Windows 任務計劃程序中執行powershell腳本
2.
windows計劃任務執行如何靜默執行python程序
3.
win2008 計劃任務配置(任務計劃程序)每分鐘執行BAT
4.
win7 下面使用任務計劃程序執行php腳步
5.
JAVA多線程執行任務
6.
多線程Runnable任務執行注意
7.
定時執行多線程任務
8.
SpringBoot多線程執行task任務
9.
Celery 4.3.0 在task中執行多線程任務
10.
任務計劃程序沒有運行
更多相關文章...
•
XML 應用程序
-
XML 教程
•
C# 多線程
-
C#教程
•
TiDB 在摩拜單車在線數據業務的應用和實踐
•
Java 8 Stream 教程
相關標籤/搜索
執行任務
遠程執行
在線課程
C#多線程
java_多線程
多線程
java多線程
python 多線程
java 多線程
線程中止
HTML
Java
快樂工作
Web Services 教程
MySQL教程
PHP教程
教程
應用
計算
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
eclipse設置粘貼字符串自動轉義
2.
android客戶端學習-啓動模擬器異常Emulator: failed to initialize HAX: Invalid argument
3.
android.view.InflateException: class com.jpardogo.listbuddies.lib.views.ListBuddiesLayout問題
4.
MYSQL8.0數據庫恢復 MYSQL8.0ibd數據恢復 MYSQL8.0恢復數據庫
5.
你本是一個肉體,是什麼驅使你前行【1】
6.
2018.04.30
7.
2018.04.30
8.
你本是一個肉體,是什麼驅使你前行【3】
9.
你本是一個肉體,是什麼驅使你前行【2】
10.
【資訊】LocalBitcoins達到每週交易比特幣的7年低點
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
在Windows 任務計劃程序中執行powershell腳本
2.
windows計劃任務執行如何靜默執行python程序
3.
win2008 計劃任務配置(任務計劃程序)每分鐘執行BAT
4.
win7 下面使用任務計劃程序執行php腳步
5.
JAVA多線程執行任務
6.
多線程Runnable任務執行注意
7.
定時執行多線程任務
8.
SpringBoot多線程執行task任務
9.
Celery 4.3.0 在task中執行多線程任務
10.
任務計劃程序沒有運行
>>更多相關文章<<