• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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
    主站蜘蛛池模板: 久久国产精品一区| 在线涩涩免费观看国产精品| 看99视频日韩精品| laowang在线精品视频| 亚洲综合精品网站| 国产一区二区精品尤物| 久久亚洲精品视频| 国产精品igao视频网| 亚洲av午夜成人片精品网站| 精品中文高清欧美| 色综合久久综精品| 97热久久免费频精品99| 亚洲av无码国产精品色午夜字幕| 久久国产精品波多野结衣AV| MM1313亚洲精品无码| 青青青青久久精品国产| 国产成人亚洲精品青草天美| 久久亚洲美女精品国产精品| 自拍中文精品无码| 亚洲精品99久久久久中文字幕| 国产伦精品一区二区免费| 欧美大片日韩精品| 国产精品www| 成人精品视频在线观看| 国产亚洲精品自在久久| 日韩精品国产另类专区| 亚洲精品乱码久久久久久按摩| 欧美精品播放| 无码人妻精品一区二区蜜桃百度| 欧美精品色精品一区二区三区| 精品午夜福利1000在线观看| 精品人妻一区二区三区毛片| 国产区精品福利在线观看精品| 91精品视频在线| 国产激情精品一区二区三区 | 久久精品视频免费| 2021国产成人精品国产| 国产99视频精品免视看7| 国产欧美精品一区二区三区| 久久国产精品一国产精品金尊| 久久精品亚洲中文字幕无码麻豆 |