<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        asp.net 計劃任務管理程序實現,多線程任務加載

        來源:懂視網 責編:小采 時間:2020-11-27 22:43:52
        文檔

        asp.net 計劃任務管理程序實現,多線程任務加載

        asp.net 計劃任務管理程序實現,多線程任務加載:asp.net下實現可以將計劃任務的方法放在global里,使用一個統一的任務管理類來管理各種任務的執行,做到并行不悖! 下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下: 第一步定義一個接口,用來規范任務必須要實現的動作,該接口只有一個方法
        推薦度:
        導讀asp.net 計劃任務管理程序實現,多線程任務加載:asp.net下實現可以將計劃任務的方法放在global里,使用一個統一的任務管理類來管理各種任務的執行,做到并行不悖! 下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下: 第一步定義一個接口,用來規范任務必須要實現的動作,該接口只有一個方法

        asp.net下實現可以將計劃任務的方法放在global里,使用一個統一的任務管理類來管理各種任務的執行,做到并行不悖!
        下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下:

        第一步定義一個接口,用來規范任務必須要實現的動作,該接口只有一個方法(簡單起見):

        代碼如下:


        /// <summary>
        /// 工作單元接口,定義一個計劃任務必須完成的工作
        /// </summary>
        public interface IScheduledTask
        {
        /// <summary>
        /// 任務執行
        /// </summary>
        void Execute();
        }

        第二步,定義一個類,用來管理計劃任務的執行和關閉:

        代碼如下:


        /// <summary>
        /// 用來執行計劃任務的基本對象
        /// </summary>
        public class ScheduledTask
        {
        private static readonly ScheduledTask _ScheduledTask = null;

        private Timer UpdateTimer = null;

        /// <summary>
        /// 間隔時間,單位為毫秒
        /// </summary>
        private int interval = 10 * 1000;
        /// <summary>
        /// 間隔時間,單位為毫秒
        /// </summary>
        public int Interval
        {
        get { return this.interval; }
        set { this.interval = value; }
        }
        /// <summary>
        /// 任務是否完成標志
        /// </summary>
        private int _IsRunning;

        /// <summary>
        /// 靜態構造函數,保證實例的唯一性
        /// </summary>
        static ScheduledTask()
        {
        _ScheduledTask = new ScheduledTask();
        }
        /// <summary>
        /// 任務隊列
        /// </summary>
        private ArrayList tasks = new ArrayList();
        /// <summary>
        /// 任務隊列
        /// </summary>
        public ArrayList Tasks { get { return tasks; } }

        /// <summary>
        /// 返回任務實例
        /// </summary>
        /// <returns></returns>
        public static ScheduledTask Instance()
        {
        return _ScheduledTask;
        }

        /// <summary>
        /// 執行任務
        /// </summary>
        public void Start()
        {
        if (UpdateTimer == null)
        {
        UpdateTimer = new Timer(new TimerCallback(UpdateTimerCallback), null, interval, interval);
        }
        }

        /// <summary>
        /// 任務處理
        /// </summary>
        /// <param name="sender"></param>
        private void UpdateTimerCallback(object sender)
        {
        if (Interlocked.Exchange(ref _IsRunning, 1) == 0)
        {
        try
        {
        //執行多個任務
        foreach (IScheduledTask task in Tasks)
        {
        ThreadStart myThreadDelegate = new ThreadStart(task.Execute);
        Thread myThread = new Thread(myThreadDelegate);
        myThread.Start();
        }
        }
        catch (Exception ex)
        {
        //錯誤處理
        CreateLog(ex.Message, true);
        }
        finally
        {
        Interlocked.Exchange(ref _IsRunning, 0);
        }
        }
        }

        /// <summary>
        /// 取消任務
        /// </summary>
        public void Stop()
        {
        if (UpdateTimer != null)
        {
        UpdateTimer.Dispose();
        UpdateTimer = null;
        }
        }

        /// <summary>
        /// 記錄日志至文本文件
        /// </summary>
        /// <param name="message"></param>
        /// <param name="iserror"></param>
        public static void CreateLog(string message, bool iserror)
        {
        DateTime dt = DateTime.Now;
        int y = dt.Year;//當前的年份
        int m = dt.Month;//當前的月份

        string root = HttpRuntime.AppDomainAppPath;

        root += "ScheduledTaskLogs";

        if (!File.Exists(root)) Directory.CreateDirectory(root);

        string dir_y = root + "\\" + y.ToString();
        string dir_m = dir_y + "\\" + m.ToString();
        string err = iserror ? "_taskerror" : "_task";
        string dirOk = dir_m + "\\" + dt.Year + dt.Month + dt.Day + err + ".txt";

        //以當前年份為名創建新目錄
        if (!File.Exists(dir_y)) Directory.CreateDirectory(dir_y);

        //以當前月份為名創建新目錄
        if (!File.Exists(dir_m)) Directory.CreateDirectory(dir_m);

        string err1 = iserror ? "錯誤" : "";

        if (File.Exists(dirOk))
        {
        StreamWriter sr = new StreamWriter(dirOk, true, Encoding.Default);
        lock (sr)
        {
        sr.WriteLine();
        sr.WriteLine("--------------計劃任務" + err1 + "日志-----------------------------------------------------------------------");
        sr.WriteLine(err1 + "時間: " + DateTime.Now.ToString());
        sr.WriteLine("詳細內容: " + message);
        sr.WriteLine("--------------------------------------------------------------------------------------------");
        }
        sr.Close();
        sr.Dispose();
        }
        else
        {
        StreamWriter sr = new StreamWriter(dirOk, false, Encoding.Default);
        lock (sr)
        {
        sr.WriteLine();
        sr.WriteLine("--------------計劃任務" + err1 + "日志-----------------------------------------------------------------------");
        sr.WriteLine(err1 + "時間: " + DateTime.Now.ToString());
        sr.WriteLine("詳細內容: " + message);
        sr.WriteLine("--------------------------------------------------------------------------------------------");
        }
        sr.Close();
        sr.Dispose();
        }
        }
        }

        第三步,定義要做的動作處理類,繼承第一步定義的接口,下面的例子是一個定時郵件發送程序,在規定的時間段執行郵件發送:
        代碼如下:


        /// <summary>
        /// 計劃任務--定時發送郵件
        /// </summary>
        public class Task_MailSend : IScheduledTask
        {
        public void Execute()
        {
        string nw = DateTime.Now.ToString("HH");

        int hh = 0;
        if (!Int32.TryParse(nw, out hh)) { return; }

        //每天11-13點發送郵件
        if (hh < 10 || hh > 17)
        {
        ScheduledTask.CreateLog("沒到發送時間", true);
        return;
        }

        DataTable dt = GetOrderedUser();
        int num = dt.Rows.Count;
        if (num == 0)
        {
        ScheduledTask.CreateLog("目前沒有用戶訂閱", true);
        return;
        }
        /*

        mail發送程序。。
        */
        }

        好了,執行上面三步后,剩下的工作就交給global來做了!

        代碼如下:


        <script runat="server"><!--

        void Application_Start(object sender, EventArgs e)
        {
        // 在應用程序啟動時運行的代碼
        //WildRen.Common是我這里的命名空間
        WildRen.Common.ScheduledTask.Instance().Interval = 12 * 60 * 60000;//設置計劃任務執行時間間隔
        WildRen.Common.ScheduledTask.Instance().Tasks.Add(new Task_MailSend());//向計劃任務管理程序添加要執行的動作
        WildRen.Common.ScheduledTask.Instance().Start();//啟動任務
        }

        void Application_End(object sender, EventArgs e)
        {
        // 在應用程序關閉時運行的代碼
        WildRen.Common.ScheduledTask.Instance().Stop();

        }

        // --></script>

        如果使用ajax連接此管理類模擬客戶端timer事件經行處理也是可以的!當然方法不是唯一的,此程序可能存在一些不足之處,歡迎大家指正!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        asp.net 計劃任務管理程序實現,多線程任務加載

        asp.net 計劃任務管理程序實現,多線程任務加載:asp.net下實現可以將計劃任務的方法放在global里,使用一個統一的任務管理類來管理各種任務的執行,做到并行不悖! 下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下: 第一步定義一個接口,用來規范任務必須要實現的動作,該接口只有一個方法
        推薦度:
        標簽: 軟件 加載 任務
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 1区1区3区4区产品亚洲| 特级毛片全部免费播放a一级| 在线v片免费观看视频| 男人的天堂av亚洲一区2区| 亚洲精品国产高清不卡在线| 99re6在线视频精品免费下载 | 亚洲国产av玩弄放荡人妇| 亚洲人成无码www久久久| 五月婷婷在线免费观看| 成年大片免费高清在线看黄| 亚洲视屏在线观看| 亚洲AV无码专区日韩| 中国xxxxx高清免费看视频| 日日躁狠狠躁狠狠爱免费视频| 亚洲影院在线观看| 国产片免费在线观看| 在线成人爽a毛片免费软件| 污网站在线观看免费| 亚洲国产日产无码精品| 国产成人亚洲精品影院| 毛片视频免费观看| 两个人看的www高清免费视频| 亚洲乱亚洲乱妇无码| 亚洲高清在线视频| 免费大黄网站在线观看| 久久精品网站免费观看| 成全视频免费观看在线看| WWW亚洲色大成网络.COM| 亚洲国产成+人+综合| 欧洲亚洲国产清在高| 在线日韩av永久免费观看| 成人在线免费看片| a在线视频免费观看| 羞羞网站免费观看| 亚洲日韩一中文字暮| 亚洲黄色在线电影| 亚洲人成网77777亚洲色| 日韩精品成人亚洲专区| 日本特黄特色aa大片免费| 免费在线观看h片| 99在线视频免费|