国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

在Web應用程序中執(zhí)行計劃任務(多線程)

2019-11-17 02:27:28
字體:
供稿:網(wǎng)友
在Web應用程序中執(zhí)行計劃任務(多線程)

在業(yè)務復雜的應用程序中,有時候會要求一個或者多個任務在一定的時間或者一定的時間間隔內(nèi)計劃進行,比如定時備份或同步數(shù)據(jù)庫,定時發(fā)送電子郵件等,我們稱之為計劃任務。實現(xiàn)計劃任務的方法也有很多,可以采用SQLAgent執(zhí)行存儲過程來實現(xiàn),也可以采用Windows任務調(diào)度程序來實現(xiàn),也可以使用Windows服務來完成我們的計劃任務,這些方法都是很好的解決方案。但是,對于Web應用程序來說,這些方法實現(xiàn)起來并不是很簡單的,主機服務提供商或者不能直接提供這樣的服務,或者需要你支付許多額外的費用。本文就介紹一個直接在Web應用程序中使用的簡單的方法,這個方法不需要任何額外的配置即可輕松實現(xiàn)。由于asp.net站點是作為Web應用程序運行的,它并不受線程的限制,因此我們可以非常方便地在application_Start和Application_End事件中建立和銷毀一個計劃任務。下面就簡單介紹一下在Web站點實現(xiàn)計劃任務的方法。我們的例子是定時往文件里添加信息,作為例子,這里把當前的時間定時地寫入文件中。一個計劃任務的工作單元稱之為一個任務(Job),下面的代碼描述了對所有任務都可以被調(diào)度引擎計劃執(zhí)行的一個通用的接口,這里的每個任務實現(xiàn)了Execute方法,供調(diào)度引擎進行調(diào)用:publicinterfaceISchedulerJob{voidExecute();}如前所述,我們的例子是實現(xiàn)往文件寫如字符日期,下面就是實現(xiàn)這一任務的方法:publicclassSampleJob:ISchedulerJob{publicvoidExecute(){//文件保存的物理路徑,CSTest為虛擬目錄名稱,F(xiàn):InetpubwwwrootCSTest為物理路徑stringp=@"F:InetpubwwwrootCSTest";//我們在虛擬目錄的根目錄下建立SchedulerJob文件夾,并設置權(quán)限為匿名可修改,//SchedulerJob.txt就是我們所寫的文件stringFILE_NAME=p+"/SchedulerJob/SchedulerJob.txt";//取得當前服務器時間,并轉(zhuǎn)換成字符串stringc=System.DateTime.Now.ToString("yyyy-mm-ddhh:MM:ss");//標記是否是新建文件的標量boolflag=false;//如果文件不存在,就新建該文件if(!File.Exists(FILE_NAME)){flag=true;StreamWritersr=File.CreateText(FILE_NAME);sr.Close();}//向文件寫入內(nèi)容StreamWriterx=newStreamWriter(FILE_NAME,true,System.Text.Encoding.Default);if(flag)x.Write("計劃任務測試開始:");x.Write(" "+c);x.Close();}}接下來,我們建立一個配置對象,告訴調(diào)度引擎執(zhí)行什么任務和執(zhí)行的時間間隔。publicclassSchedulerConfiguration{//時間間隔PRivateintsleepInterval;//任務列表privateArrayListjobs=newArrayList();publicintSleepInterval{get{returnsleepInterval;}}publicArrayListJobs{get{returnjobs;}}//調(diào)度配置類的構(gòu)造函數(shù)publicSchedulerConfiguration(intnewSleepInterval){sleepInterval=newSleepInterval;}}下面就是調(diào)度引擎,定時執(zhí)行配置對象的任務publicclassScheduler{privateSchedulerConfigurationconfiguration=null;publicScheduler(SchedulerConfigurationconfig){configuration=config;}publicvoidStart(){while(true){//執(zhí)行每一個任務foreach(ISchedulerJobjobinconfiguration.Jobs){ThreadStartmyThreadDelegate=newThreadStart(job.Execute);ThreadmyThread=newThread(myThreadDelegate);myThread.Start();Thread.Sleep(configuration.SleepInterval);}}}}所有的準備工作已經(jīng)完成,下面就是激活引擎的工作了。為了讓我們的任務計劃執(zhí)行,我們在Global.asax.cs文件里的Applicatio_Start和Application_End里進行建立和銷毀工作,首先建立一個調(diào)度進程運行的線程,我們這里的運行間隔時間為3秒鐘。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 遂平县| 花莲县| 定远县| 绥化市| 宁都县| 临洮县| 三门峡市| 嵩明县| 阜平县| 巴东县| 阳朔县| 曲沃县| 光山县| 榆中县| 周宁县| 阳曲县| 文水县| 景洪市| 苍山县| 涡阳县| 迭部县| 筠连县| 怀柔区| 沙坪坝区| 龙州县| 武冈市| 台南市| 大安市| 蓬安县| 罗江县| 黑龙江省| 那坡县| 治多县| 永宁县| 晋宁县| 巢湖市| 江达县| 达日县| 航空| 香河县| 光泽县|